`
yx1989
  • 浏览: 10569 次
  • 性别: Icon_minigender_1
  • 来自: 烟台
社区版块
存档分类
最新评论

day06-会话与状态

 
阅读更多

通过Cookie显示上次访问时间:
     1.获取cookie,如果存在则显示上次访问时间
     2.回送本次访问时间。
通过cookie.setMaxAge(0)可以删除cookie,注意,删除cookie时,path必须一致,否则不会删除

Cookie实例,实现浏览记录:
1.创建模拟数据库的类,并用Map存入数据。
2.创建Book类,里边有若干属性,并有get set方法。
3.在代表网站首页的页面,输出网站所有产品。产品名设置为超链接,并将产品id号作为参数附在超链接的后边。
4.在点击上述超链接后,跳转到显示商品详细信息的页面。根据id号显示商品,并构建用户曾经看过的商品的cookie。
5.构建cookie的过程分为4中情况,分别处理。

Session
session的工作是基于cookie的。session会把id号回写给cookie。这个cookie是会话级别的。
如果要解决类似关闭浏览器购物车中商品信息不丢失等问题的话,可以自己构造一个包含sessionid的cookie,并设置个小于三十分钟的生命周期,发给response。
代码如下:
     Cookie cookie = new Cookie("JSESSIONID", session.getId());
     cookie.setMaxAge(1800);
     response.addCookie(cookie);

简易购物车案例:
首页servlet:
     1.创建模拟数据库的类,并用Map存入数据。
     2.创建Book类,里边有若干属性,并有get set方法。
     3.在代表网站首页的页面,输出网站所有产品。产品名设置为超链接,并将产品id号作为参数附在超链接的后边。
     4.点击上述链接后跳转到购买servlet。
购买servlet:
     1.得到用户要买的商品id号。 
     2.得到用户用于保存所有商品的集合(购物车),加入新的商品后重新存入session。
     3.手工回送seeion的cookie。
     4.跳转到购物车页面
购物车servlet:
     1.获取到seeion里保存的购物信息。并显示。

解决用户禁用cookie的问题:
     重写超链接即在超链接后加上sessionid。Java中含有了可以自动重写超链接的方法。encodeURL,这个方法可以自动判断是否需要重写超链接,如果用户没有禁用cookie也就是说不需要重写超链接,则链接不会改变。还有专门用来重写重定向链接的encodeRedirectURL。
     重写超链接需要注意的问题:一定要先获取到session才能进行超链接重写。

session实例:用户登录
判断用户名和密码是否匹配,如果匹配则把user对象存入到session,跳转到首页后显示欢迎该用户。
否则显示用户名或密码不正确。

Session实例,防止重复提交:
重复提交的情景:
     1.刷新。浏览器刷新的意义。重新请求,把干过的事情重干一遍
     2.后退后再次点击。
     3.多次点击。
javascript防重复提交:设置一个标记提交过了的变量,如果已经提交过了,则不再次提交
     javascript防重复提交存在的问题:javascript 防重复提交,不能防刷新,和后退。并且只能防君子不能防小人。虽然防不死还是要写,因为可以减轻服务器压力。并且用户体验好。
Session防止重复提交的原理。将一个随机数写到表单的hidden属性并保存到session里。比对request请求中的随机数,若是跟session中的随机数匹配,处理请求,并立即三处session里的随机数。若不相同则不作响应。


使用md5算法获取md5字节数组后不能直接用来构造String,因为md5字节数组的1010可能跟默认的编码不同,从而产生乱码。
可用解决方案,查表法和Base64算法。
也可以直接生成uuid。

什么情况用什么域:
用完就没用了就用request。如mvc中从servlet向jsp转发。
用完了,一会还要用,就用session。如购物车
数据用完了,一会不仅要给这个用户用,还要给别人看。就用severletcontent。如:聊天室
注意:能用小的,就不要用大的。

运行时异常 出了异常一定要让上层程序知道,但又不能直接抛出编译时异常。抛出运行时异常抛出。
抛到跟用户交互的地方就不能再抛了。这个时候捕获异常,提示用户出错,并记录异常。

什么叫做一个会话。只要是基于当前窗口弹出的所有窗口,标签页都是一个会话。
两个会话共享session和关闭窗口后再开一样。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics