Session与Cookie的详解及如何实现Session共享
2016-09-12 14:49
603 查看
首先我们来说一说Cookie,Cookie实际是Web服务端与客户端彼此传递的一部分内容,内容是任意的,但要在允许的长度范围内(一般每个域名在30-70不等)。客户端会将它保存在本地机器上(如IE会保存在本地的一个txt文件)。由于客户端程序对其进行管理,过期的Cookie会自动删除,我们可以通过以下方式来设置cookie的过期时间:
默认cookies失效时间是直到关闭浏览器,也可以指定cookie过期时间
每当客户端访问某个域下某个目录中的网页时,便会将保存在本地并且属于哪个域下对应的目录的Cookie信息附在网页请求头部信息当中一并发送给服务端。
下面我们来说一说Session:
See塞申斯欧诺保存在服务器端,为了获得更高的存取速度,服务器一般把Session放在内存中,每一个用户都会有一个独立的session。如果Session内容过于复杂,当大量用户访问服务器时可能会导致内存溢出。因此,session里的信息应该尽量精简。
为了防止内存溢出,服务器会把长时间内没有活跃的session从内存删除,这个时间就是session的超时时间。具体设置方法有以下三种:
1、在主页面或公共页面假如session.setMaxInactiveInterval(900);可以通过对应的getMaxInavtiveInterval()获取,单位是秒,时间以服务器时间为准
2、在web.xml
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
在不影响系统代码的情况下实现了多条tomcat的session的共享
默认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的详解及如何实现Session共享
- get与post区别详解,session与cookie区别,转发和重定向区别,如何实现session共享,webservice与httpservice区别
- java web-如何实现IE禁用cookie后继续使用session
- cookie禁用,如何使用session实现文件共享
- [DB][Oracle]如何用一个SQL文实现Insert/Update/Delete和--MERGE命令详解
- 如何实现Asp与Asp.Net共享Session
- 如何实现Asp与Asp.Net共享Session
- ASP小偷程序如何利用XMLHTTP实现表单的提交以及cookies或session的发送
- 在类文件中如何获取cookie或者session的值
- 如何服务器集群系统实现方案详解
- Session详解,session与cookie
- 如何实现Asp与Asp.Net共享Session
- 如何实现Asp与Asp.Net共享Session
- 如何在AjaxPro.net的AjaxMethod中使用session和cookie
- 如何实现Asp与Asp.Net共享Session
- 如何实现Asp与Asp.Net共享Session
- asp小偷程序如何利用xmlhttp实现表单的提交以及cookies或session的发送
- 如何使 FlashGet "正常合法" 下载 Session 中的自定义文件链接呢? JSP/Servlet 实现!
- ASP如何利用XMLHTTP实现表单的提交以及cookies或session的发送和Referer
- 如何在AjaxPro.net的AjaxMethod中使用session和cookie