关于浏览器禁用cook URL重写

(1)html

session老是放在服务器上的,每一个客户会跟一个sessionID对应。由于HTTP是无链接的,如何区分同一个客户的屡次请求呢,就须要客户端每次发请求的时候,发送相应的sessionID。
一般状况下,sessionID在客户端以cookie的形式保存。若是浏览器静止了cookie,客户端再向服务器发请求的时候,就不会发送sessionID,所以服务器就会将这个请求做为一个新客户,因此就会出现session值丢失的假象。
这时候出现一个问题,若是客户浏览器不支持cookie,怎么办?J2EE提供的另外一个办法就是URL重写,写超连接的时侯,老是用response.encodeURL(url),链接就会变成*.jsp?sessionID=......,完成了原来用cookie完成的功能。
J2EE建议,不论客户浏览器是否支持cookie,服务器端编程都建议使用URL重写。
web

(2)编程

web上用的都是非链接的网络协议
session 是存在服务器上的
每一个session有一个惟一的session ID(为了标识他是那个客户端的)
浏览器

在启动session的同时,会在客户端生成cookie,服务器把session ID加到cookie中
每次服务器和客户端交互的时候,就是从cookie中取得session ID 来定位服务器上的session
服务器

这样只要你的cookie不过时,服务器上有你的session,就不会出问题
cookie

(3)网络

JSP实如今浏览器关闭cookies状况下的会话管理session

一般,会话管理是经过服务器将 Session ID 做为一个 cookie 存储在用户的 Web 浏览器中来惟一标识每一个用户会话。若是浏览器不支持 cookies,或者将浏览器设置为不接受 cookies,咱们能够经过 URL 重写来实现会话管理。jsp

  实质上 URL 重写是经过向 URL 链接添加参数,并把 session ID 做为值包含在链接中。然而,为使这生效,你须要为你的 servlet 响应部分的每一个链接添加 session ID 。编码

   把 session ID 加到一个链接可使用一对方法来简化:response.encodeURL() 使 URL 包含 session ID,若是你须要使用重定向,可使用 response.encodeRedirectURL () 来对 URL 进行编码。

  encodeURL () 及 encodeRedirectedURL () 方法首先判断 cookies 是否被浏览器支持;若是支持,则参数 URL 被原样返回,session ID 将经过 cookies 来维持。

  来看下面的例子,两个 JSP 文件:hello1.jsp 和 hello2.jsp,及它们之间的影响。咱们在 hello1.jsp 中简单的建立一个会话,并在 session 中存储一个对象实例。接着用户能够点击页面的链接到达 hello2.jsp。在 hello2.jsp 中,咱们从 session 中获取原先放置的对象并显示它的内容。注意,咱们在 hello1.jsp 中调用了 encodeURL() 方法来得到 hello2.jsp 的连接,使得在浏览器停用 cookies 的状况下,session ID 自动添加到 URL,hello2.jsp 仍能获得 session 对象。

  首先在启用 cookies 的状况下运行。而后关闭对 cookie 的支持,重启浏览器,再运行一次。每次你均可以看到会话管理在起做用,并能在页之间传递信息。

注意,若是你想让这个例子能在关闭了 cookies 的浏览器中工做,你的 JSP 引擎必须支持 URL 重写。


hello1.jsp




hello2.jsp

hello2.jsp



<%
Integer i= (Integer)session.getValue("num");
out.println("Num value in session is "+i.intValue());

文章引用自:http://macrochen.blogdriver.com/macrochen/543381.html

相关文章
相关标签/搜索