首页 > 代码库 > 会话—session

会话—session

这篇随笔是上一篇的姊妹篇@_@!

session

      在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
Session和Cookie的主要区别在于:
1.Cookie是把用户的数据写给用户的浏览器。
   Session技术把用户的数据写到用户独占的session中。
2.Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
注意,虽然代码相同,但不同浏览器从各自session得到各自的数据。

session实现原理

  服务器是如何做到一个session为一个浏览器的多次请求而服务  

       服务器创建session出来后,会把 session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关, 去访问服务器时,都会带着session 的id号去,服务器发现客户机带session id过来了,就会使用内存中与之对应的session为之服务        

如何做到一个session为多个浏览器服务  

       服务器第一次创建session,程序员把session id号,手工以cookie的形式回送给浏览器,并设置cookie的有效期这样,即使用户的浏览器关了,开新浏览器时,还会带着session id找服务器,服务器从而就可以用内存中与之对应的session为第二个浏览器窗口服务。
       

应用:关掉IE后,再次打开IE,还能访问上次的session

 1 package com.yyz.session; 2  3 import java.io.IOException; 4  5 import javax.servlet.ServletException; 6 import javax.servlet.http.Cookie; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 import javax.servlet.http.HttpSession;11 12 public class SessionDemo1 extends HttpServlet {13 14     public void doGet(HttpServletRequest request, HttpServletResponse response)15             throws ServletException, IOException {16         HttpSession session = request.getSession();17         session.setAttribute("data", "abc");18         String sessionid = session.getId();19         Cookie cookie = new Cookie("JSESSIONID",sessionid);20         cookie.setMaxAge(3600);21         cookie.setPath("/test");22         response.addCookie(cookie);23     }24 25     public void doPost(HttpServletRequest request, HttpServletResponse response)26             throws ServletException, IOException {27         doGet(request,response);28     }29 30 }
package com.yyz.session;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class SessionDemo2 extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        HttpSession session = request.getSession();        String data = (String)session.getAttribute("data");        System.out .println(data);    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {           doGet(request,response);    }}

 IE禁用Cookie后的session处理

解决方案:URL重写(把用户可能点的每一个超链接后面,都跟上用户的session id号)
•response. encodeRedirectURL(java.lang.String url)
•用于对sendRedirect方法后的url地址进行重写。
•response. encodeURL(java.lang.String url)
•用于对表单action和超链接的url地址进行重写

session对象的创建和销毁时机

     用户第一次request.getSession时创建
     session对象默认30分钟没有使用,则服务器会自动销毁session,
     用户在web.xml文件中手工配置session的失效时间
     用户可以手工调用session.invalidate方法,摧毁session
       

 

 

会话—session