首页 > 代码库 > 会话—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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。