您的位置:首页 > 其它

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

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

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

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

每当客户端访问某个域下某个目录中的网页时,便会将保存在本地并且属于哪个域下对应的目录的Cookie信息附在网页请求头部信息当中一并发送给服务端。

下面我们来说一说Session:

See塞申斯欧诺保存在服务器端,为了获得更高的存取速度,服务器一般把Session放在内存中,每一个用户都会有一个独立的session。如果Session内容过于复杂,当大量用户访问服务器时可能会导致内存溢出。因此,session里的信息应该尽量精简。

为了防止内存溢出,服务器会把长时间内没有活跃的session从内存删除,这个时间就是session的超时时间。具体设置方法有以下三种:

1、在主页面或公共页面假如session.setMaxInactiveInterval(900);可以通过对应的getMaxInavtiveInterval()获取,单位是秒,时间以服务器时间为准

2、在web.xml

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">session-config</span>></span>
<span class="hljs-tag"><<span class="hljs-title">session-timeout</span>></span>1<span class="hljs-tag"></<span class="hljs-title">session-timeout</span>></span>
<span class="hljs-tag"></<span class="hljs-title">session-config</span>></span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li></ul>

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

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">host</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"localhost"</span> <span class="hljs-attribute">appBase</span>=<span class="hljs-value">"webapps"</span> <span class="hljs-attribute">unpackWARS</span>=<span class="hljs-value">"true"</span> <span class="hljs-attribute">autoDeploy</span>=<span class="hljs-value">"true"</span> <span class="hljs-attribute">Validation</span>=<span class="hljs-value">"false"</span> <span class="hljs-attribute">xmlNamespaceAware</span>=<span class="hljs-value">"false"</span>></span>
<span class="hljs-tag"><<span class="hljs-title">contest</span> <span class="hljs-attribute">docBase</span>=<span class="hljs-value">"/sessiontest"</span> <span class="hljs-attribute">path</span>=<span class="hljs-value">"/sessiontest"</span> <span class="hljs-attribute">reloadable</span>=<span class="hljs-value">"true"</span>></span>
<span class="hljs-tag"><<span class="hljs-title">Manager</span> <span class="hljs-attribute">className</span>=<span class="hljs-value">"de.javakaffee.web.msm.MemcachedBackupSessionManager"</span> <span class="hljs-attribute">memcachedNodes</span>=<span class="hljs-value">"n1.localhost:1211"</span> <span class="hljs-attribute">requestUriIgnorePattern</span>=<span class="hljs-value">".*\(png|gif|jpg|css|js)$"</span> <span class="hljs-attribute">sessionBackupAsync</span>=<span class="hljs-value">"false"</span> <span class="hljs-attribute">sessionBackupTimeout</span>=<span class="hljs-value">"100"</span> <span class="hljs-attribute">transcoderFactoryClass</span>=<span class="hljs-value">"de.javakaffee.web.msm.serizlizer.kryo.KryoTranscodeFactory"</span> <span class="hljs-attribute">customerConverter</span>=<span class="hljs-value">"de.javakaffee.web.msm.serizlizer.kryo.JodaDateTimeRegistration"</span> /></span>
<span class="hljs-tag"></<span class="hljs-title">context</span>></span>
<span class="hljs-tag"></<span class="hljs-title">host</span>></span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>

在不影响系统代码的情况下实现了多条tomcat的session的共享
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  session cookie web服务