Session与Cookie的详解及如何实现Session共享

首先我们来说一说Cookie,Cookie实际是Web服务端与客户端彼此传递的一部分内容,内容是任意的,但要在允许的长度范围内(一般每个域名在30-70不等)。客户端会将它保存在本地机器上(如IE会保存在本地的一个txt文件)。由于客户端程序对其进行管理,过期的Cookie会自动删除,我们可以通过以下方式来设置cookie的过期时间:

默认cookies失效时间是直到关闭浏览器,也可以指定cookie过期时间

//首先说一下Cookie的创建和删除
// java
Cookie cookie = new Cookie("cookieName",strNum);//创建
Cookie[] cookies = request.getCookies();
for(int i=0;i<cookies.length;i++){
  Cookie cookie = new Cookie("bbs_0001",null);
  cookie.setMaxAge(0);
  //cookie.setPath("/");//根据你创建cookie的路径进行填写   
  response.addCookie(cookie);
}
//js
document.cookie = name+"="+value+";expires="+expdate.toGMTString()+";path=/";
setCookie(name, 1, -1);//设置成已过期1
Response.Cookies("user_name").Expires=Date+1;
//保存Cookies一个小时
Response.Cookies("myCookie").Expires=(now()+1/24);
Response.Cookies("myCookie").Expires=DateAdd("h",1,Now());
//设置60个月以后过期
Response.Cookies("myCookie").Expires=DateAdd("m",60,now());
//在expires后面定义的时间可以用时间函数代替
//date()+7表示今天的时间加上7天,而second()+7则是7秒了

每当客户端访问某个域下某个目录中的网页时,便会将保存在本地并且属于哪个域下对应的目录的Cookie信息附在网页请求头部信息当中一并发送给服务端。
下面我们来说一说Session:
See塞申斯欧诺保存在服务器端,为了获得更高的存取速度,服务器一般把Session放在内存中,每一个用户都会有一个独立的session。如果Session内容过于复杂,当大量用户访问服务器时可能会导致内存溢出。因此,session里的信息应该尽量精简。
为了防止内存溢出,服务器会把长时间内没有活跃的session从内存删除,这个时间就是session的超时时间。具体设置方法有以下三种:
1、在主页面或公共页面假如session.setMaxInactiveInterval(900);可以通过对应的getMaxInavtiveInterval()获取,单位是秒,时间以服务器时间为准
2、在web.xml

<session-config>
 <session-timeout>1</session-timeout>
</session-config>

3、直接在应用服务器中,如果是tomcat,在conf/web.xml中, 找到默认30分钟
Session的共享(以tomcat为例)
需要的jar包
•kryo-1.03.jar
•minlog-1.2.jar
•reflectasm-0.9.jar
•asm-3.2.jar
•kryo-serializers-0.8.jar
•msm-kryo-serializer-1.3.6.jar
•joda-time-1.1.jar
将上述jar包放入%TOMCATHOME%lib下,然后修改conf/server.xml

<host appBase="webapps" unpackWARS="true" autoDeploy="true" Validation="false" xmlNamespaceAware="false">
 <contest docBase="/sessiontest" path="/sessiontest" reloadable="true">
 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1.localhost:1211" requestUriIgnorePattern=".*\(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serizlizer.kryo.KryoTranscodeFactory" customerConverter="de.javakaffee.web.msm.serizlizer.kryo.JodaDateTimeRegistration" />
 </context>
</host>

在不影响系统代码的情况下实现了多条tomcat的session的共享

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/52f2f2d3624c1df86e83a025b206243f.html