Session的使用與Session的生命週期

2022-08-20 19:57:14 字數 3719 閱讀 6700

1、httpsession的方法

object getattribute(string);

enumerationgetattributenames();

long getcreationtime();

string getid();

string getlastaccessedtime();

int getmaxinactiveinterval();

servletcontext getservletcontext();

void invalidate();//銷毀當前session

boolean isnew();

void removeattribute();

void setattribute(string, object);

void setmaxinactiveinterval(int);

2、session生命週期

session儲存在伺服器端,一般放置在伺服器的記憶體中(為了高速訪問),sessinon在使用者訪問第一次訪問伺服器時建立,需要注意只有訪問jsp、servlet等程式時才會建立session,只訪問html、image等靜態資源並不會建立session,可呼叫request.getsession(true)強制生成session。

session什麼時候失效?

1. 伺服器會把長時間沒有活動的session從伺服器記憶體中清除,此時session便失效。tomcat中session的預設失效時間為20分鐘。

2. 呼叫session的invalidate方法。

session對瀏覽器的要求:

雖然session儲存在伺服器,對客戶端是透明的,它的正常執行仍然需要客戶端瀏覽器的支援。這是因為session需要使用cookie作為識別標誌。http協議是無狀態的,session不能依據http連線來判斷是否為同一客戶,因此伺服器向客戶端瀏覽器傳送乙個名為jsessionid的cookie,它的值為該session的id(也就是httpsession.getid()的返回值)。session依據該cookie來識別是否為同一使用者。

該cookie為伺服器自動生成的,它的maxage屬性一般為-1,表示僅當前瀏覽器內有效,並且各瀏覽器視窗間不共享,關閉瀏覽器就會失效。因此同一機器的兩個瀏覽器視窗訪問伺服器時,會生成兩個不同的session。但是由瀏覽器視窗內的鏈結、指令碼等開啟的新視窗(也就是說不是雙擊桌面瀏覽器圖示等開啟的視窗)除外。這類子視窗會共享父視窗的cookie,因此會共享乙個session。

注意:新開的瀏覽器視窗會生成新的session,但子視窗除外。子視窗會共用父視窗的session。例如,在鏈結上右擊,在彈出的快捷選單中選擇"在新視窗中開啟"時,子視窗便可以訪問父視窗的session。

url位址重寫是對客戶端不支援cookie的解決方案。url位址重寫的原理是將該使用者session的id資訊重寫到url位址中。伺服器能夠解析重寫後的url獲取session的id。這樣即使客戶端不支援cookie,也可以使用session來記錄使用者狀態。httpservletresponse類提供了encodeurl(string url)實現url位址重寫,該方法會自動判斷客戶端是否支援cookie。如果客戶端支援cookie,會將url原封不動地輸出來。如果客戶端不支援cookie,則會將使用者session的id重寫到url中。

注意:tomcat判斷客戶端瀏覽器是否支援cookie的依據是請求中是否含有cookie。儘管客戶端可能會支援cookie,但是由於第一次請求時不會攜帶任何cookie(因為並無任何cookie可以攜帶),url位址重寫後的位址中仍然會帶有jsessionid。當第二次訪問時伺服器已經在瀏覽器中寫入cookie了,因此url位址重寫後的位址中就不會帶有jsessionid了。

1、httpsession的方法

object getattribute(string);

enumerationgetattributenames();

long getcreationtime();

string getid();

string getlastaccessedtime();

int getmaxinactiveinterval();

servletcontext getservletcontext();

void invalidate();//銷毀當前session

boolean isnew();

void removeattribute();

void setattribute(string, object);

void setmaxinactiveinterval(int);

2、session生命週期

session儲存在伺服器端,一般放置在伺服器的記憶體中(為了高速訪問),sessinon在使用者訪問第一次訪問伺服器時建立,需要注意只有訪問jsp、servlet等程式時才會建立session,只訪問html、image等靜態資源並不會建立session,可呼叫request.getsession(true)強制生成session。

session什麼時候失效?

1. 伺服器會把長時間沒有活動的session從伺服器記憶體中清除,此時session便失效。tomcat中session的預設失效時間為20分鐘。

2. 呼叫session的invalidate方法。

session對瀏覽器的要求:

雖然session儲存在伺服器,對客戶端是透明的,它的正常執行仍然需要客戶端瀏覽器的支援。這是因為session需要使用cookie作為識別標誌。http協議是無狀態的,session不能依據http連線來判斷是否為同一客戶,因此伺服器向客戶端瀏覽器傳送乙個名為jsessionid的cookie,它的值為該session的id(也就是httpsession.getid()的返回值)。session依據該cookie來識別是否為同一使用者。

該cookie為伺服器自動生成的,它的maxage屬性一般為-1,表示僅當前瀏覽器內有效,並且各瀏覽器視窗間不共享,關閉瀏覽器就會失效。因此同一機器的兩個瀏覽器視窗訪問伺服器時,會生成兩個不同的session。但是由瀏覽器視窗內的鏈結、指令碼等開啟的新視窗(也就是說不是雙擊桌面瀏覽器圖示等開啟的視窗)除外。這類子視窗會共享父視窗的cookie,因此會共享乙個session。

注意:新開的瀏覽器視窗會生成新的session,但子視窗除外。子視窗會共用父視窗的session。例如,在鏈結上右擊,在彈出的快捷選單中選擇"在新視窗中開啟"時,子視窗便可以訪問父視窗的session。

url位址重寫是對客戶端不支援cookie的解決方案。url位址重寫的原理是將該使用者session的id資訊重寫到url位址中。伺服器能夠解析重寫後的url獲取session的id。這樣即使客戶端不支援cookie,也可以使用session來記錄使用者狀態。httpservletresponse類提供了encodeurl(string url)實現url位址重寫,該方法會自動判斷客戶端是否支援cookie。如果客戶端支援cookie,會將url原封不動地輸出來。如果客戶端不支援cookie,則會將使用者session的id重寫到url中。

注意:tomcat判斷客戶端瀏覽器是否支援cookie的依據是請求中是否含有cookie。儘管客戶端可能會支援cookie,但是由於第一次請求時不會攜帶任何cookie(因為並無任何cookie可以攜帶),url位址重寫後的位址中仍然會帶有jsessionid。當第二次訪問時伺服器已經在瀏覽器中寫入cookie了,因此url位址重寫後的位址中就不會帶有jsessionid了。

Django之元件 cookie與session

cookie 由伺服器產生,存放在客戶端瀏覽器上的鍵值對。設定值 取值 request.cookies.get key request.cookies key 刪除值 session 儲存在伺服器上的鍵值對。設定值 request.session key value request.session ...

cookie的使用與session的保持

首先科普概念,具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於採用伺服器端保持狀態的方案在客戶端也需要儲存乙個標識,所以session機制是需要借助於cookie機制來達到儲存標識的目的,所謂session保持會話,對...

php使用者登入驗證cookie與session區別

php高效能高流量使用者登入驗證機制用cookie 還是 session?一 cookie 區別session?cookie客戶端 session存在伺服器端 session安全。二 session在分布式上存在難點。這一點memcache可能會解決一些。但如果不用memcache,解決起來問題大....