『壹』 Session到底是保存在客戶端還是伺服器端
Session存儲在伺服器的內存中。
瀏覽器第一次訪問伺服器會在伺服器端生成一個session,有一個sessionid和它對應。它存儲在伺服器的內存中,tomcat的StandardManager類將session存儲在內存中,也可以持久化到file,資料庫,memcache,Redis等。
客戶端只保存sessionid到cookie中,而不會保存session,session銷毀只能通過invalidate或超時,關掉瀏覽器並不會關閉session。
session機制
session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。
當程序需要為某個客戶端的請求創建一個session時,伺服器首先檢查這個客戶端的請求里是否已包含了一個session標識——稱為session id,如果已包含則說明以前已經為此客戶端創建過session,伺服器就按照session id把這個session檢索出來使用(檢索不到,會新建一個)。
如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字元串,這個session id將被在本次響應中返回給客戶端保存。
以上內容參考 網路--session(計算機術語)
『貳』 前端js怎麼存儲session
你是想直接在客戶端操作 ,還是用js把值傳到伺服器斷操作?
如果是前者的話,js不能操作session。後者的話,可以用ajax非同步處理
『叄』 用的ExtJs 和Dwr,session超時無法解決!!
伺服器端處理請求沒有所謂非同步的概念吧,
所謂的ajax無非就是通過XHR和iframe向伺服器請求數據, IE是支持非同步的XHR的, 而火狐不支持, Ext是通過interval來判斷請求狀態實現的, 其他瀏覽器不清楚
個人理解, 僅供參考
『肆』 前端session超時,後台資料庫查詢連接還在執行
如果需要查詢結果增加timeout,時間就行。如果不需要,主動終止查詢,後台的查詢session會處於inactive狀態,kill掉就行,這樣就無此連接了。如果經常需要,編寫儲存過程腳本。下面是參考:
CREATE OR REPLACE PROCEDURE "KILL_SESSION" AS
v_sid number;
v_serial number;
killer varchar2(1000);
CURSOR cursor_session_info is select sid,serial# from v$session where type!='BACKGROUND' and status='INACTIVE' and last_call_et>2700 and username='ICWEB' and machine='orc';
BEGIN
open cursor_session_info;
loop
fetch cursor_session_info into v_sid,v_serial;
exit when cursor_session_info%notfound;
killer:='alter system disconnect session '''||v_sid||','||v_serial||''' post_transaction immediate';
execute immediate killer;
end loop;
dbms_output.PUT_LINE(cursor_session_info%rowcount||' users with idle_time>2700s have been killed!');
close cursor_session_info;
END;
/
『伍』 前端怎麼獲取session的失效時間
session是後端的對象,前端是拿取不到的。前端只能操作類似的cookie,session只能後端操作。
『陸』 前端會話超時,異常怎麼處理
)普通http請求的session超時。
b)非同步http請求的session超時,使用ext後大部分的界面刷新都是非同步的ajax請求。
不管是那種類型的http請求總是可以由一個過濾器來捕捉。
分類:普通http請求的header參數中沒有x-requested-with:XMLHttpRequest頭信息,而非同步的有。
其實對於常見的ajax框架,header中還有標示自己身份的header信息。
對於普通的http請求,發現session超時後直接重定向到一個超時頁面,顯示訪問超時。
對於非同步http請求,其實有兩種處理方式,第一種:發現session超時後則向請求的response中寫入特定的超時頭信息,客戶端ajax對象檢測
頭信息,發現有超時狀態標志後調用顯示超時信息的javascript方法,提示用戶訪問超時。
第二種:發現session超時後,添加respone報錯信息 ,在前端通過ext的requestexception事件來監聽是否會話超時。
『柒』 viewstate,session誰存儲的數據量最大各自是是一個什麼范圍
viewstate存在頁面上,隨頁面傳輸,不夠安全,同時轉到別的頁面就消失了。
session存在伺服器端,安全,可存一些復雜的數據,但是佔用伺服器內存或資料庫資源,和頁面跳轉沒有關系,一個用戶一個session。
應用場合是不同的,ViewState只限制在當前頁面內;Session用於頁面間傳遞。
另外Application Session Cookie ViewState Cache Hidden
Session
1. Session用來保存每一個用戶的專有信息
2. Session的生存期是用戶持續請求時間加上一段時間(一般是20分鍾左右)
3. Session信息是保存在Web伺服器內存中的,保存數據量可大可小
4. Session超時或者被關閉將自動釋放數據信息
5. 由於用戶停止使用應用程序之後它仍在內存中存留一段時間,因此這種方法效率較低
6. 代碼:Session[「UserID」]=「test」;
String UserName=Session[「UserID」].ToString();
ViewState
1. ViewState用來保存用戶的狀態信息,有效期等於頁面的生命周期
2. 可以保存大量數據但是要慎用,因為會影響程序性能
3. 所有的Web伺服器控制項都是用ViewState在頁面PostBack期間保存狀態
4. 不需要則關閉 @page 裡面設置EnableViewState=false
5. 代碼:ViewState[「ID」]=「yiner」;
String ID =ViewState[「ID」].ToString();
Application
1. Application用來保存所有用戶共用的信息
2. 在Asp時代,如果要保存的數據在應用程序生存期內不會或者很少發生改變,那麼使用Application是理想的選擇。但是在Asp.net開發環境中我們把類似的配置數據放在Web.config中。
3. 如果要使用Application 要注意的是所有的寫操作都要在Application_OnStart事件中完成(global.Asax),盡管可以使用Application.Lock()避免了沖突,但是它串列化了對Application的請求,會產生嚴重的性能瓶頸。
4. 不要使用Application保存大數據量信息
5. 代碼:Application[「UserID」]=」test」;
String UserName=Application[「UserID」].ToString();
Cookie
1. Cookie用來保存客戶瀏覽器請求伺服器頁面的請求信息
2. 我們可以存放非敏感的用戶信息,保存時間可以根據需要設置
3. 如果沒有設置Cookie失效日期,它的生命周期保存到關閉瀏覽器為止
4. Cookie對象的Expires屬性設置為MinValue表示永不過期
5. Cookie存儲的數據量受限制,大多數的瀏覽器為4K因此不要存放大數據
6. 由於並非所有的瀏覽器都支持Cookie,數據將以明文的形式保存在客戶端
7. 代碼:Response.Cookies[「UserID」]=」test」;
String UserName= Resopnse.Cookies [「UserID」].ToString();
Cache
1. Cache用於在Http請求期間保存頁面或者數據
2. Cache的使用可以大大的提高整個應用程序的效率
3. 它允許將頻繁訪問的伺服器資源存儲在內存中,當用戶發出相同的請求後
伺服器不是再次處理而是將Cache中保存的數據直接返回給用戶
4. 可以看出Cache節省的是時間—伺服器處理時間
5. Cache實例是每一個應用程序專有的,其生命周期==該應用程序周期
應用程序重啟將重新創建其實例
6. 注意:如果要使用緩存的清理、到期管理、依賴項等功能必須使用Insert 或者Add方法方法添加信息
7. 代碼:Cache[「ID」]=「yiner」;或者Cache.Insert(「ID」,」test」);
String ID =Cache[「ID」].ToString();
Hidden
1. Hidden控制項屬於Html類型的伺服器控制項,始終處於隱藏狀態
2. 每一次提交的時候它會和其他伺服器控制項一起提交到伺服器端
3. 代碼如下:Hidden.Value=」king」;
string id=Hidden.Value; 要使用Runat=server