关于URL重写、session,cookie

来源:互联网 发布:谷歌地图高程数据 编辑:程序博客网 时间:2024/06/02 12:56

(1)

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

(2)

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

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

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

(3)

JSP实现在浏览器关闭cookies情况下的会话管理

通常,会话管理是通过服务器将 Session ID 作为一个 cookie 存储在用户的 Web浏览器中来唯一标识每个用户会话。如果浏览器不支持 cookies,或者将浏览器设置为不接受 cookies,我们可以通过 URL重写来实现会话管理。

  实质上 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



0 0
原创粉丝点击