第二章 Session会话管理

采用网址重写的缺点:

在有些Web浏览器中,URL限制为2000个字符。

仅当有链接要插入值时,值才能转换成后面的资源。此外,要把值添加到静态页面的链接中,可不是一件容易的事情。

网址重写必须在服务器端有效。所有的链接都必须带有值,这样可能出现一个问题,即一个页面中可能会有许多个链接。

某些字符,例如空格、&符号及问号都必须进行编码。

添加到URL中的信息是明显可见的,这种情况有时可不是我们所期待的。

网址重写案例设计:

1.访问top10,返回一个页面,该页面中的每个按钮的url都被重写了,加上了type参数

2.点击按钮后,访问top10,并带上Token,服务端根据Token信息返回相应的页面

3.服务器根据用户选择的URL信息,返回相应的页面内容

隐藏域案例设计:

1.customer、editCustomer、updateCustomer用同一个Servlet进行处理

2.Customer上edit按钮,会将用户id提交给CustomerEdit页面

3.CustomerEdit上用隐藏域记录当前正在被编辑用户的id,update按钮会将信息提交给updateCustomer

4.updateCustomer完成更新,不返回页面

Cookie:

cookie是自动地在Web服务器和浏览器之间来回传递的一小块信息。

cookie适用于那些需要跨越许多页面的信息。

由于cookie是作为HTTP标头嵌入的,因此传输它的过程由HTTP协议处理。

可以根据自己的需要设置cookie的有效期限。

对于Web浏览器而言,每台Web 服务器最多可以支持20个cookie。

Cookie相关方法:

Cookie(String name, String value)

httpServletResponse.addCookie(Cookie cookie)

cookie.getName()

HttpSession对象:

getSession()

getSession(bool create)

setAttribute(String name, Object value)

getAttribute(String name)

getAttributeNames()

getId():获得HttpSession标识符

invalidate():这个方法强制Session过期,并将绑到到Session上的所有对象都解除绑定

getMaxInacitveInterval():了解一个HttpSession在用户最后一次访问之后还可以维持多久。

setMaxInactiveInterval():传递0,则Session永远不过期

添加到HttpSession中的值不一定是String,可以为任意Java对象,只要它的类实现了java.io.Serializable接口即可,以便当Servlet容器认为有必要的时候,保存的对象可以序列化成一个文件或者保存到数据库中,例如,当容器的内存快要用完的时候。仍然可以将非序列化的对象保存在HttpSession中,但是如果Servlet容器试图将它们序列化,将会以失败告终,并抛出异常。

HttpSession中保存的值不发送到客户端,这与其他的Session管理方法不同。而是Servlet容器为它创建的每一个HttpSession生成一个唯一标识符,并将这个标识符作为一个token发送给浏览器,一般是作为一个名为JSESSIONID的cookie,或者作为一个jsessionid参数添加到URL后面。在后续的请求中,浏览器会将这个token发送回服务器,使服务器能够知道是哪个用户在发出请求。无论Servlet容器选择用哪一种方式传输session标识答,那都是在后台自动完成的,不需要你去做额外的处理工作。

猜你喜欢

转载自www.cnblogs.com/junjie2019/p/10658255.html
今日推荐