1. 程式人生 > >session和cookie是什麼,登入,許可權控制,不登入不讓訪問資源

session和cookie是什麼,登入,許可權控制,不登入不讓訪問資源

session是什麼?

1session是會話, 會話狀態僅在支援 cookie 的瀏覽器中保留(詳情訪問網址http://lovejing007.iteye.com/blog/1585634)。

2瀏覽器訪問http://127.0.0.1:8080/test網站,輸入http url,被登入攔截器攔截,攔截器程式碼獲取http url攜帶的sessionid,攔截器按照session id把這個session檢索出來,如果有則獲取該session,如果沒有則新建一個session並將sessionid返回給瀏覽器,應該是寫入瀏覽器的cookie中(如sessionid為6F481685E30631E8B5FF3B09AC732851,只要瀏覽器不關閉,瀏覽器訪問http://127.0.0.1:8080/test網站的sessionid都是6F481685E30631E8B5FF3B09AC732851),攔截器

驗證該session的某個sessionAttr是否為空,例如 c.getSessionAttr(“userId”) ,如果通過不為空說明使用者登入過(前提是使用者登入後要寫入該sessionAttr),就讓使用者訪問http url對應的action程式碼,攔截器程式碼驗證如果沒有該session,進入login.jsp輸入使用者名稱和密碼,使用者名稱和密碼正確之後,給當前的session設定一個sessionAttr(“userId”),所以用session方式,登入使用者的資訊是儲存在伺服器端的。

這篇文章中,http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html,跟我上文描述的一樣,不謀而合。

3如果關閉瀏覽器,會話就自動結束了。

4獲取sessionId的方法是:

public class AuthInterceptor implements Interceptor {
public void intercept(ActionInvocation ai) {
Controller c = ai.getController();
String sessionId = c.getSession().getId();
System.out.println("sessionId是:" + sessionId);
UserDetail userDetail = (UserDetail) c.getSessionAttr(ProjectContants.CURRENT_USER);
String logined = (String) c.getPara("haveoktestlogined");
if (!(StringKit.notBlank(logined) && logined.equals("true"))) {
if (userDetail == null) {
c.redirect("/login");
return;
}
}
ai.invoke();
}
}

怎麼控制session的保持時間?在web.xml中配置如下:

<session-config>
<session-timeout>500</session-timeout>
</session-config>

session存在於伺服器中,到底是存在於哪裡??session是由tomcat產生並管理的,而應用程式怎麼訪問tomcat?訪問tomcat的方式是封裝在jar包中的,只要匯入jar包,test工程就可以獲取tomcat中的session了。

session物件的建立一般是源於這樣的一條語句: 
Session session = request.getSession(false);或者Session session = request.getSession();如果不在乎伺服器壓力可能多那麼一點點的話。 
在Tomcat的實現中,這個request是org.apache.catalina.connector.Request類的包裝類。具體參考http://zddava.iteye.com/blog/311053這篇文章。


cookie是什麼?

cookie的用法重點參考http://blog.csdn.net/fangaoxin/article/details/6952954這篇文章。

攔截器設定cookie資訊併發送給客戶端,伺服器端不保留。

Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
cookie.setMaxAge(0);                          // 設定生命週期為0,不能為負數
response.addCookie(cookie);                    // 必須執行這一句

攔截器驗證瀏覽器傳送來的http url請求所攜帶的cookie,

if (cookies!=null) {
             out.write("您上次訪問的時間是:");
             for (int i = 0; i < cookies.length; i++) {
                 Cookie cookie = cookies[i];
                 if (!cookie.getName().equals("username")) {
                   //跳轉到登入介面
                 }else{

                      //使用者已經登陸了,跳轉到http url對應的action程式碼 去執行}

             }
         }else {
             out.write("這是您第一次訪問本站!");
         }

cookie和session的比較?

cookie方式,登入使用者資訊是儲存在瀏覽器中的;session方式,登入使用者資訊是儲存在伺服器中的。

雖然原理是儲存在一個在客戶端,一個是儲存在伺服器中。但是拋開實際的執行原理和過程,單純從程式設計 的角度來說,兩者模式的使用過程都差不多。