Session直接翻譯成中文比較困難,一般都譯成時(shí)域。在計(jì)算機(jī)專業(yè)術(shù)語中,Session是指一個(gè)終端用戶與交互系統(tǒng)進(jìn)行通信的時(shí)間間隔,通常指從注冊(cè)進(jìn)入系統(tǒng)到注銷退出系統(tǒng)之間所經(jīng)過的時(shí)間。以及如果需要的話,可能還有一定的操作空間。
具體到Web中的Session指的就是用戶在瀏覽某個(gè)網(wǎng)站時(shí),從進(jìn)入網(wǎng)站到關(guān)閉瀏覽器所經(jīng)過的這段時(shí)間,也就是用戶瀏覽這個(gè)網(wǎng)站所花費(fèi)的時(shí)間。因此從上述的定義中我們可以看到,Session實(shí)際上是一個(gè)特定的時(shí)間概念。
需要注意的是,一個(gè)Session的概念需要包括特定的客戶端,特定的服務(wù)器端以及不中斷的操作時(shí)間。A用戶和C服務(wù)器建立連接時(shí)所處的Session同B用戶和C服務(wù)器建立連接時(shí)所處的Session是兩個(gè)不同的Session。
session的工作原理
?。?)當(dāng)一個(gè)session第一次被啟用時(shí),一個(gè)唯一的標(biāo)識(shí)被存儲(chǔ)于本地的cookie中。
?。?)首先使用session_start()函數(shù),PHP從session倉庫中加載已經(jīng)存儲(chǔ)的session變量。
(3)當(dāng)執(zhí)行PHP腳本時(shí),通過使用session_register()函數(shù)注冊(cè)session變量。
?。?)當(dāng)PHP腳本執(zhí)行結(jié)束時(shí),未被銷毀的session變量會(huì)被自動(dòng)保存在本地一定路徑下的session庫中,這個(gè)路徑可以通過php.ini文件中的session.save_path指定,下次瀏覽網(wǎng)頁時(shí)可以加載使用。
session的用法
Session簡(jiǎn)單來說就是服務(wù)器給客戶端的一個(gè)編號(hào)。當(dāng)一臺(tái)WWW服務(wù)器運(yùn)行時(shí),可能有若干個(gè)用戶瀏覽正在運(yùn)正在這臺(tái)服務(wù)器上的網(wǎng)站。當(dāng)每個(gè)用戶首次與這臺(tái)WWW服務(wù)器建立連接時(shí),他就與這個(gè)服務(wù)器建立了一個(gè)Session,同時(shí)服務(wù)器會(huì)自動(dòng)為其分配一個(gè)SessionID,用以標(biāo)識(shí)這個(gè)用戶的唯一身份。這個(gè)SessionID是由WWW服務(wù)器隨機(jī)產(chǎn)生的一個(gè)由24個(gè)字符組成的字符串,我們會(huì)在下面的實(shí)驗(yàn)中見到它的實(shí)際樣子。
這個(gè)唯一的SessionID是有很大的實(shí)際意義的。當(dāng)一個(gè)用戶提交了表單時(shí),瀏覽器會(huì)將用戶的SessionID自動(dòng)附加在HTTP頭信息中,(這是瀏覽器的自動(dòng)功能,用戶不會(huì)察覺到),當(dāng)服務(wù)器處理完這個(gè)表單后,將結(jié)果返回給SessionID所對(duì)應(yīng)的用戶。試想,如果沒有SessionID,當(dāng)有兩個(gè)用戶同時(shí)進(jìn)行注冊(cè)時(shí),服務(wù)器怎樣才能知道到底是哪個(gè)用戶提交了哪個(gè)表單呢。除了SessionID,在每個(gè)Session中還包含很多其他信息。
1.設(shè)置session
java里面,可以給session添加自定義key,value(HttpServletRequest request 作為方法的輸入參數(shù))
HttpSession session = request.getSession();
session.setAttribute(“usrid”, userid);
2.取得session
jsp里面可以 這段來源自CSDN一個(gè)討論貼,自己時(shí)間后并沒有成功,報(bào)錯(cuò)是session is undifiened,后來又找了資料說 javascript不提供訪問session的功能。session只能通過動(dòng)態(tài)程序操作,可以使用ajax給javascript返回值。
session.getAttribute(“username”);
java里面可以 (HttpServletRequest request 作為方法的輸入?yún)?shù))
HttpSession session = request.getSession();
session.getAttribute(“usrname”);
一個(gè)使用session進(jìn)行超時(shí)訪問控制的實(shí)例
?。?)LoginServlet.java 在登錄時(shí),設(shè)置session屬性
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String userid = request.getParameter(“username”);
String pwd = request.getParameter(“password”);
JSONObject json = new JSONObject();
AdminDAO adminDAO = new AdminDAO();
List《Admin》 userList = adminDAO.findByProperty(“usrid”, userid);
if(userList.get(0).getPassword().equals(pwd)){
json.put(“success”, true);
HttpSession session = request.getSession();
session.setAttribute(“usrid”, userid);
} else {
json.put(“success”, false);
json.put(“meg”, “sorry”);
}
PrintWriter pw = response.getWriter();
pw.print(json.toString());
pw.close();
}
?。?)HomePage.java 在跳轉(zhuǎn)到相關(guān)頁面時(shí),獲取并判斷session
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
JSONObject json = new JSONObject();
HttpSession session = request.getSession();
if(session==null||session.getAttribute(“usrid”)==null)
{
json.put(“success”, false);
json.put(“meg”, “Time out,please login again!”);
}
else
{
...
json.put(“jsonArray”, array);
}
PrintWriter pw = response.getWriter();
pw.print(json.toString());
pw.close();
}
?。?)homePage.html 頁面根據(jù)(2)的返回值判斷是否執(zhí)行跳轉(zhuǎn)操作
$(document).ready(function(){
$.ajax({
url: “HomePageServlet”,
type: “post”,
dataType: “json”,
success: function(data) {
if (data[“success”]) {
...
}
else
{
alert(data[“meg”]);
window.location.href=“l(fā)ogin.html”;
}
}
});
});
評(píng)論
查看更多