Session直接翻譯成中文比較困難,一般都譯成時域。在計算機專業術語中,Session是指一個終端用戶與交互系統進行通信的時間間隔,通常指從注冊進入系統到注銷退出系統之間所經過的時間。以及如果需要的話,可能還有一定的操作空間。
具體到Web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到關閉瀏覽器所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。因此從上述的定義中我們可以看到,Session實際上是一個特定的時間概念。
需要注意的是,一個Session的概念需要包括特定的客戶端,特定的服務器端以及不中斷的操作時間。A用戶和C服務器建立連接時所處的Session同B用戶和C服務器建立連接時所處的Session是兩個不同的Session。
session的工作原理
(1)當一個session第一次被啟用時,一個唯一的標識被存儲于本地的cookie中。
(2)首先使用session_start()函數,PHP從session倉庫中加載已經存儲的session變量。
(3)當執行PHP腳本時,通過使用session_register()函數注冊session變量。
(4)當PHP腳本執行結束時,未被銷毀的session變量會被自動保存在本地一定路徑下的session庫中,這個路徑可以通過php.ini文件中的session.save_path指定,下次瀏覽網頁時可以加載使用。
session的用法
Session簡單來說就是服務器給客戶端的一個編號。當一臺WWW服務器運行時,可能有若干個用戶瀏覽正在運正在這臺服務器上的網站。當每個用戶首次與這臺WWW服務器建立連接時,他就與這個服務器建立了一個Session,同時服務器會自動為其分配一個SessionID,用以標識這個用戶的唯一身份。這個SessionID是由WWW服務器隨機產生的一個由24個字符組成的字符串,我們會在下面的實驗中見到它的實際樣子。
這個唯一的SessionID是有很大的實際意義的。當一個用戶提交了表單時,瀏覽器會將用戶的SessionID自動附加在HTTP頭信息中,(這是瀏覽器的自動功能,用戶不會察覺到),當服務器處理完這個表單后,將結果返回給SessionID所對應的用戶。試想,如果沒有SessionID,當有兩個用戶同時進行注冊時,服務器怎樣才能知道到底是哪個用戶提交了哪個表單呢。除了SessionID,在每個Session中還包含很多其他信息。
1.設置session
java里面,可以給session添加自定義key,value(HttpServletRequest request 作為方法的輸入參數)
HttpSession session = request.getSession();
session.setAttribute(“usrid”, userid);
2.取得session
jsp里面可以 這段來源自CSDN一個討論貼,自己時間后并沒有成功,報錯是session is undifiened,后來又找了資料說 javascript不提供訪問session的功能。session只能通過動態程序操作,可以使用ajax給javascript返回值。
session.getAttribute(“username”);
java里面可以 (HttpServletRequest request 作為方法的輸入參數)
HttpSession session = request.getSession();
session.getAttribute(“usrname”);
一個使用session進行超時訪問控制的實例
(1)LoginServlet.java 在登錄時,設置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();
}
(2)HomePage.java 在跳轉到相關頁面時,獲取并判斷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();
}
(3)homePage.html 頁面根據(2)的返回值判斷是否執行跳轉操作
$(document).ready(function(){
$.ajax({
url: “HomePageServlet”,
type: “post”,
dataType: “json”,
success: function(data) {
if (data[“success”]) {
...
}
else
{
alert(data[“meg”]);
window.location.href=“login.html”;
}
}
});
});
評論
查看更多