Ⅰ 3.session管理緩存的方法有哪些
一.flush
使數據表中的記錄和Session緩存中的對象的狀態保持一致。為了保持一致,則可能會發送對應的sql語句
1.在Transaction的commit()方法中:先調用session的flush方法,再提交事務
2.flush方法可能會發送sql語句,但不會提交事務。
3.注意:在未提交事務或顯示的調用session.flush()方法之前,也有可能會進行flush()操作。
1).執行HQL或QBC查詢,會先進行flush()操作,以得到數據表最新的記錄。
2).若記錄的id是由底層資料庫使用自增方式生成的,則在調用save方法時,就會發送insert語句,因為save方法後,必須保證對象的id是存在的。
二.refresh
會強制發送select語句,以使session緩存中對象的狀態和數據表中對應的記錄保持一致。
三.clear
清理緩存
四.save
使一個臨時對象變為持久化對象
為對象分配id
在flush緩存時會發送一條insert語句
在save方法之前的id是無效的
持久化對象的id是不能被修改的
五.persist
也會執行insert操作
和save的區別:
在調用persist方法之前,若對象已經有id了,則不會執行insert,而拋出異常。
六.get vs load
1. 執行get方法:立即載入對象,
執行load方法,若不使用該對象,則不會立即執行查詢操作,而返回一個代理對象
get是立即檢索,load是延遲檢索。
2. 若數據表中沒有對應的記錄
get返回null
load 若不使用該對象的任何屬性,沒問題,若需要初始化該對象則拋出異常
3. load方法可能會拋出LazyInitializationException 異常:在需要初始化代理對象之前已經關閉了session
七.update:
1. 若更新一個持久化對象, 不需要顯示的調用 update 方法. 因為在調用 Transaction
的 commit() 方法時, 會先執行 session 的 flush 方法.
2. 更新一個游離對象, 需要顯式的調用 session 的 update 方法. 可以把一個游離對象
變為持久化對象
需要注意的:
1. 無論要更新的游離對象和數據表的記錄是否一致, 都會發送 UPDATE 語句.
如何能讓 updat 方法不再盲目的出發 update 語句呢 ? 在 .hbm.xml 文件的 class 節點設置
select-before-update=true (默認為 false). 但通常不需要設置該屬性.
2. 若數據表中沒有對應的記錄, 但還調用了 update 方法, 會拋出異常
3. 當 update() 方法關聯一個游離對象時,
如果在 Session 的緩存中已經存在相同 OID 的持久化對象, 會拋出異常. 因為在 Session 緩存中
不能有兩個 OID 相同的對象!
Ⅱ 如何在不同的網站之間傳遞session
session 是http伺服器管理的,當然不可能共享。可以用同步登錄的方法。使用cookie,例如站A登錄了,保存登錄信息到cookie,那麼可以調用B站提供的介面(GET方式),傳遞登錄信息給B站,保存登錄信息到cookie.傳遞的信息要加密。前提是共享用戶信息,比如discuz的ucenter所使用的技術。流程: A 登錄-》寫A需要的cookie信息-》返回一個頁麵包含腳本 <script src="http://b.com/api/login.asp?code=SHEWEh**eJJJ"></script>,這樣瀏覽器就會訪問b站,傳過去了登錄信息,比如用戶名密碼,當然是加密的-> http://b.com/api/login.asp驗證信息,並寫b需要的cookie。同樣b站登錄的時候,調用a站的api。這樣可以實現多站登錄了。所以還要注冊每個站,並提供相同的介面。
Ⅲ PHP 如何能通過URL傳遞session
你將session的值放在地址參數就可以了,
http://192.168.1.100/general/email/id=$_SESSION['id']
另外, SESSION 是全局的, 可以不用地址帶參數傳遞的, 只要SESSION注冊這個key就可以了
Ⅳ 模態窗口的session怎麼傳遞
試試清一下模式對話框緩存:
1, 使用java提供的方法,在jsp或者servlet中都可以
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>
2, 使用HTML標記,如下面:
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</HEAD>
Ⅳ 請問如何將值寫入session中,或者將值傳到另一頁面中
請問如何將值寫入session中,或者將值傳到另一頁面中的方法。
如下參考:
1.首先,我們需要打開vscode,創建一個H5規范的頁面,將一個jquery源文件放在同級目錄中,並將jquery引入到頁面中。
Ⅵ session可以存儲的方式有幾種,如果程序採取分布式,怎麼樣實現session共享
一。分布式Session的幾種實現方式
1.基於資料庫的Session共享
2.基於NFS共享文件系統
3.基於memcached 的session,如何保證 memcached 本身的高可用性?
4. 基於resin/tomcat web容器本身的session復制機制
5. 基於TT/Redis 或 jbosscache 進行 session 共享。
6. 基於cookie 進行session共享
或者是:
一、Session Replication 方式管理 (即session復制)
簡介:將一台機器上的Session數據廣播復制到集群中其餘機器上
使用場景:機器較少,網路流量較小
優點:實現簡單、配置較少、當網路中有機器Down掉時不影響用戶訪問
缺點:廣播式復制到其餘機器有一定廷時,帶來一定網路開銷
二、Session Sticky 方式管理
簡介:即粘性Session、當用戶訪問集群中某台機器後,強制指定後續所有請求均落到此機器上
使用場景:機器數適中、對穩定性要求不是非常苛刻
優點:實現簡單、配置方便、沒有額外網路開銷
缺點:網路中有機器Down掉時、用戶Session會丟失、容易造成單點故障
三、緩存集中式管理
簡介:將Session存入分布式緩存集群中的某台機器上,當用戶訪問不同節點時先從緩存中拿Session信息
使用場景:集群中機器數多、網路環境復雜
優點:可靠性好
缺點:實現復雜、穩定性依賴於緩存的穩定性、Session信息放入緩存時要有合理的策略寫入
二。Session和Cookie的區別和聯系以及Session的實現原理
1、session保存在伺服器,客戶端不知道其中的信息;cookie保存在客戶端,伺服器能夠知道其中的信息。
2、session中保存的是對象,cookie中保存的是字元串。
3、session不能區分路徑,同一個用戶在訪問一個網站期間,所有的session在任何一個地方都可以訪問到。而cookie中如果設置了路徑參數,那麼同一個網站中不同路徑下的cookie互相是訪問不到的。
4、session需要藉助cookie才能正常<nobr oncontextmenu="return false;"
onmousemove="kwM(3);" id="key3" onmouseover="kwE(event,3, this);"
style="COLOR: #6600ff; BORDER-BOTTOM: 0px dotted; BACKGROUND-COLOR:
transparent; TEXT-DECORATION: underline" onclick="return kwC();"
onmouseout="kwL(event, this);"
target="_blank">工作</nobr>。如果客戶端完全禁止cookie,session將失效。
http是無狀態的協議,客戶每次讀取web頁面時,伺服器都打開新的會話,而且伺服器也不會自動維護客戶的上下文信息,那麼要怎麼才能實現網上商店中的
購物車呢,session就是一種保存上下文信息的機制,它是針對每一個用戶的,變數的值保存在伺服器端,通過SessionID來區分不同的客
戶,session是以cookie或URL重寫為基礎的,默認使用cookie來實現,系統會創造一個名為JSESSIONID的輸出cookie,我
們叫做session cookie,以區別persistent
cookies,也就是我們通常所說的cookie,注意session
cookie是存儲於瀏覽器內存中的,並不是寫到硬碟上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但
是當我們把瀏覽器的cookie禁止後,web伺服器會採用URL重寫的方式傳遞Sessionid,我們就可以在地址欄看到
sessionid=KWJHUG6JJM65HS2K6之類的字元串。
明白了原理,我們就可以很容易的分辨出persistent cookies和session
cookie的區別了,網上那些關於兩者安全性的討論也就一目瞭然了,session cookie針對某一次會話而言,會話結束session
cookie也就隨著消失了,而persistent
cookie只是存在於客戶端硬碟上的一段文本(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站腳本攻擊,自然不如
session cookie安全了。
通常session
cookie是不能跨窗口使用的,當你新開了一個瀏覽器窗口進入相同頁面時,系統會賦予你一個新的sessionid,這樣我們信息共享的目的就達不到
了,此時我們可以先把sessionid保存在persistent
cookie中,然後在新窗口中讀出來,就可以得到上一個窗口SessionID了,這樣通過session cookie和persistent
cookie的結合我們就實現了跨窗口的session tracking(會話跟蹤)。
在一些web開發的書中,往往只是簡單的把Session和cookie作為兩種並列的http傳送信息的方式,session
cookies位於伺服器端,persistent
cookie位於客戶端,可是session又是以cookie為基礎的,明白的兩者之間的聯系和區別,我們就不難選擇合適的技術來開發web
service了。
總之:
一、cookie機制和session機制的區別
具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。
同時我們也看到,由於在伺服器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上還有其他選擇。
二、會話cookie和持久cookie的區別
如果不設置過期時間,則表示這個cookie生命周期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽會話期的cookie被稱為會話cookie。會話cookie一般不保存在硬碟上而是保存在內存里。
如果設置了過期時間,瀏覽器就會把cookie保存到硬碟上,關閉後再次打開瀏覽器,這些cookie依然有效直到超過設定的過期時間。
存儲在硬碟上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存的cookie,不同的瀏覽器有不同的處理方式。
三、如何利用實現自動登錄
當用戶在某個網站注冊後,就會收到一個惟一用戶ID的cookie。客戶後來重新連接時,這個用戶ID會自動返回,伺服器對它進行檢查,確定它是否為注冊用戶且選擇了自動登錄,從而使用戶無需給出明確的用戶名和密碼,就可以訪問伺服器上的資源。
四、如何根據用戶的愛好定製站點
網站可以使用cookie記錄用戶的意願。對於簡單的設置,網站可以直接將頁面的設置存儲在cookie中完成定製。然而對於更復雜的定製,網站只需僅將一個惟一的標識符發送給用戶,由伺服器端的資料庫存儲每個標識符對應的頁面設置。
五、cookie的發送
1.創建Cookie對象
2.設置最大時效
3.將Cookie放入到HTTP響應報頭
如果你創建了一個cookie,並將他發送到瀏覽器,默認情況下它是一個會話級別的cookie:存儲在瀏覽器的內存中,用戶退出瀏覽器之後被刪除。如
果你希望瀏覽器將該cookie存儲在磁碟上,則需要使用maxAge,並給出一個以秒為單位的時間。將最大時效設為0則是命令瀏覽器刪除該
cookie。
發送cookie需要使用HttpServletResponse的addCookie方法,將cookie插入到一個 Set-Cookie
HTTP請求報頭中。由於這個方法並不修改任何之前指定的Set-Cookie報頭,而是創建新的報頭,因此我們將這個方法稱為是addCookie,而
非setCookie。同樣要記住響應報頭必須在任何文檔內容發送到客戶端之前設置。
六、cookie的讀取
1.調用request.getCookie
要獲取有瀏覽器發送來的cookie,需要調用HttpServletRequest的getCookies方法,這個調用返回Cookie對象的數組,對應由HTTP請求中Cookie報頭輸入的值。
2.對數組進行循環,調用每個cookie的getName方法,直到找到感興趣的cookie為止
cookie與你的主機(域)相關,而非你的servlet或JSP頁面。因而,盡管你的servlet可能只發送了單個cookie,你也可能會得到許多不相關的cookie。
例如:
String cookieName = 「userID」;
Cookie cookies[] = request.getCookies();
if (cookies!=null){
for(int i=0;i
Cookie
cookie = cookies[i];
if (cookieName.equals(cookie.getName())){
doSomethingWith(cookie.getValue());
}
}
}
七、如何使用cookie檢測初訪者
A.調用HttpServletRequest.getCookies()獲取Cookie數組
B.在循環中檢索指定名字的cookie是否存在以及對應的值是否正確
C.如果是則退出循環並設置區別標識
D.根據區別標識判斷用戶是否為初訪者從而進行不同的操作
八、使用cookie檢測初訪者的常見錯誤
不能僅僅因為cookie數組中不存在在特定的數據項就認為用戶是個初訪者。如果cookie數組為null,客戶可能是一個初訪者,也可能是由於用戶將cookie刪除或禁用造成的結果。
但是,如果數組非null,也不過是顯示客戶曾經到過你的網站或域,並不能說明他們曾經訪問過你的servlet。其它servlet、JSP頁面以及
非Java Web應用都可以設置cookie,依據路徑的設置,其中的任何cookie都有可能返回給用戶的瀏覽器。
正確的做法是判斷cookie數組是否為空且是否存在指定的Cookie對象且值正確。
九、使用cookie屬性的注意問題
屬性是從伺服器發送到瀏覽器的報頭的一部分;但它們不屬於由瀏覽器返回給伺服器的報頭。
因此除了名稱和值之外,cookie屬性只適用於從伺服器輸出到客戶端的cookie;伺服器端來自於瀏覽器的cookie並沒有設置這些屬性。
因而不要期望通過request.getCookies得到的cookie中可以使用這個屬性。這意味著,你不能僅僅通過設置cookie的最大時效,
發出它,在隨後的輸入數組中查找適當的cookie,讀取它的值,修改它並將它存回Cookie,從而實現不斷改變的cookie值。
十、如何使用cookie記錄各個用戶的訪問計數
1.獲取cookie數組中專門用於統計用戶訪問次數的cookie的值
2.將值轉換成int型
3.將值加1並用原來的名稱重新創建一個Cookie對象
4.重新設置最大時效
5.將新的cookie輸出
十一、session在不同環境下的不同含義
session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/消息,比如打電話是從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。
然而當session一詞與網路協議相關聯時,它又往往隱含了「面向連接」和/或「保持狀態」這樣兩個含義。
session在Web開發環境下的語義又有了新的擴展,它的含義是指一類用來在客戶端與伺服器端之間保持狀態的解決方案。有時候Session也用來指這種解決方案的存儲結構。
十二、session的機制
session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。
但程序需要為某個客戶端的請求創建一個session的時候,伺服器首先檢查這個客戶端的請求里是否包含了一個session標識-稱為session
id,如果已經包含一個session id則說明以前已經為此客戶創建過session,伺服器就按照session
id把這個session檢索出來使用(如果檢索不到,可能會新建一個,這種情況可能出現在服務端已經刪除了該用戶對應的session對象,但用戶人為
地在請求的URL後面附加上一個JSESSION的參數)。
如果客戶請求不包含session id,則為此客戶創建一個session並且生成一個與此session相關聯的session id,這個session id將在本次響應中返回給客戶端保存。
十三、保存session id的幾種方式
A.保存session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給伺服器。
B.
由於cookie可以被人為的禁止,必須有其它的機制以便在cookie被禁止時仍然能夠把session
id傳遞回伺服器,經常採用的一種技術叫做URL重寫,就是把session
id附加在URL路徑的後面,附加的方式也有兩種,一種是作為URL路徑的附加信息,另一種是作為查詢字元串附加在URL後面。網路在整個交互過程中始終
保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個session
id。
C.另一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,添加一個隱藏欄位,以便在表單提交時能夠把session id傳遞回伺服器。
十四、session什麼時候被創建
一個常見的錯誤是以為session在有客戶端訪問時就被創建,然而事實是直到某server端程序(如Servlet)調用HttpServletRequest.getSession(true)這樣的語句時才會被創建。
十五、session何時被刪除
session在下列情況下被刪除:
A.程序調用HttpSession.invalidate()
B.距離上一次收到客戶端發送的session id時間間隔超過了session的最大有效時間
C.伺服器進程被停止
再次注意關閉瀏覽器只會使存儲在客戶端瀏覽器內存中的session cookie失效,不會使伺服器端的session對象失效。
Ⅶ 如何把session值傳給另一個頁子
session是不需要在傳遞的,直接就可以掉用的,只要沒有離開這個網站,你在任何一個頁面里都可以調用.session 對象的生命周期是在網站沒有關閉的之前都有效,而且,他只對某個特定的客戶端瀏覽器有效.你可以去看看IIS的幫助文件
要實現你說的那種效果,你只要在index.asp里判斷一下session("name")是不是空,是不是非法就可以了,其實你可以用DW做,插如一個限制對頁的訪問就可以了.
Ⅷ 火狐瀏覽器中,禁止cookie後,session怎麼傳值為什麼我用URL重寫技術不好用呢是不是
禁用了cookie後,你session的key的傳遞顯然也會出現問題,要想解決這個問題有2套辦法:
1、在weblogic、tomcat等中間件中,是接收外接jsessionid傳參方式的,你可以配置打開;
2、自己實現手動保持,這個需要你使用資料庫或者緩存伺服器作為你的數據中介。
不過你所描述的問題中,對於鏈接地址的重寫實在看不出哪裡需要用到session信息。
Ⅸ session傳遞參數用法舉例
在a頁面裡面設置需要保存的參數值 session("name")="administrator"只要a頁面在打開狀態下(保證不與該站點斷開連接),再打開其他該站點下的頁面,都可以使用session("name")的值a.asp<%session("name")="test"%>b.aspname=session("name") '獲取session信息response.write name '輸出test字元
Ⅹ PHP中,兩個伺服器如何傳遞SESSION
最好的辦法是把SESSION寫進資料庫,又安全,資料庫開啟遠程訪問,也就是在一台電腦上可以訪問另一台電腦的資料庫,這樣兩個伺服器的SESSION都把數據寫進這一個資料庫里,又可以相互讀取,資料庫也就是做了一個橋梁。