关于 session ,cookie,cross Context session

本文介绍了Cookie的设置与有效期管理,探讨了服务器端如何通过Session跟踪用户状态,包括Session的创建及防止多窗口操作引起的混乱等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1) javax.servlet.http.Cookie

 public void setMaxAge(int expiry)

负值意味着,关闭浏览器即失效。0,删除这个cookie. 正值:秒为单位的生存时间

2)public int getMaxAge()

   默认返回-1  ,一般保存在内存中,而不是硬盘

3)   Cookie cc=new Cookie("JSee","this is a test");

        cc.setMaxAge(3600);

        cc.setPath("/");

JSee="this is a test"; Version=1; Max-Age=3600; Expires=Sun, 30-Jan-2011 04:49:07 GMT; Path=/

 

JSESSIONID=BC4CA2D4950A9204E4F97D16A429847D;

4)

server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 

<%@page session="false"%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句

HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。 

5)

6)如何防止用户打开两个浏览器窗口操作导致的session混乱 

这个问题与防止表单多次提交是类似的,可以通过设置客户端的令牌来解决。

就是在服务器每次生成一个不同的id返回给客户端,同时保存在session里,

客户端提交表单时必须把这个id也返回服务器,程序首先比较返回的id与保存在session里的值是否一致,

如果不一致则说明本次操作已经被提交过了。

7)CATALINA_HOME/conf/server.xml

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" x  mlValidation="false"> 

 

    <Context path="/项目A" reloadable="false" crossContext="true"></Context> 

      <Context path="/项目B" reloadable="false" crossContext="true"></Context> 

 

  </Host> 

      在项目A中

       req.getSession().setAttribute("base.user", user.getLoginName()); 

     ServletContext ContextA =this.getServletContext(); 

 

     ContextA.setAttribute("session", req.getSession()); 

 

 

     在项目B中,写入以下代码取出Session 

 

 

        ServletContext Context1= Context.getContext("/BaseA"); 

        HttpSession session2 =(HttpSession)Context1.getAttribute("session"); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值