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");