当前位置:文档之家› java web之会话技术cookie+session

java web之会话技术cookie+session

会话技术
1.什么是会话:
指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接、访问多少个资源,直到用户关闭浏览器,整个这个过程我们成为一次会话
2.实际情况:
张三打开浏览器,进入淘宝,买了2样东西;李四打开浏览器,进入淘宝,买了3样东西。

当这两位结账时,结账的s e r v l e t如何得到张三和李四买的东西,并为他两分别结账?
3.使用会话保存数据
✧S e s s i o n
✧C o o k i e
为什么需要C o o k i e?
情景1.张在访问某个网站的时候,看到了提示你上次登录网站的时间,而且不同用户上次登录时间不同,这个怎么实现
没有会话技术前:u s e r表每次用户登录就更新u s e r表里的时间
I d N a m e P a s s w o
r d L o g i n_t i m e v i e w H i s
t o r y
001A a A a2012-1-5
5:00:0022,33,2
5
002B b B b2012-3-12
6:00:0012,24,5
6
情景2.访问购物网的时候,能够看到曾经浏览过的商品,当然不同用户浏览过的商品不同
如果登录了,则可以用数据库
但如果没有登录那又怎么办??????
情景3.保存登录密码及用户名
Cookie技术
1.服务器把每个用户的数据以cookie的形式写给用户各自的浏览器当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去
Servlet有一个Cookie类 Cookie(String name ,String value)
3.Cookie小结:
①Cookie在服务端创建 Cookie cookie = new Cookie(name,value);
②Cookie是保存在浏览器这端 response.addCookie(cookie);
③Cookie的生命周期可以通过cookie.setMaxAge(int second)来设置
Cookie默认生命周期是会话级别(即存储在浏览器的内存中)
如果没有设置setMaxAge(),则该cookie的生命周期当浏览器关闭时就挂了,setMaxAge(0)
+response.addCookie(cookie),相当于删除Cookie 此时如果cookie文件内部只有该Cookie则,文件也一并删除;否则只删除该Cookie
④Cookie可以被多个浏览器共享
⑤ Cookie 可以想象成一张表
此处读入的cookies 只能是此web 资源下设置的cookies 而不是浏览器保存的所有的cookie
如果cookie 的名字相同啥情况? 则替换
⑥ 一个web 应用可以保存多个cookie(放置在同一个文件内部) ,最多不要超过20个,每个Cookie 的大小限制为4kB ,因此Cookie 不会塞满你的硬盘,更不会被作为"拒绝服务"的攻击手段。

浏览器一般保存的Cookie 不会超过300个
⑦ Cookie 存放中文,出现的乱码问题 存放:
String val = .URLEncoder.encode("中文名称","utf-8"); Cookie cookie = new Cookie("name","val");
读出:
String val =
.URLDecoder.decode(cookie.getValue("name"),"utf-8"); out.println("name="+val);
⑧ Cookie 存放的时候是以明文方式存放,因此安全性较低,我们可以通过加密后保存(MD5算法)---->被称为不可逆的算法.
数据库中存放的密码也必须是经过MD5加密后的密码. ---->用户时登陆先进行MD5加密,再到数据库验证 4.Cookie 可以用来做什么 1) 保存上次登录时间等信息
2) 保存用户名和密码,在一定时间不用重新登录
3) 记录用户访问网站的喜好(背景色、背景音乐等等) 4) 网站的个性化,比如定制网站的服务,内容等 5) 购物车
Cookie 的应用实例:保存登陆名和密码。

Session
1.问题1:如何实现在不同的页面,可以去查看信息,可以查看信息(比如说购物车),同时还要实现不同的用户看到的信息是自己的
2.Session 可以做什么? 1)网上商城购物车 2)保存登陆用户信息
3)将某些数据放入到Session 中,可供同一用户的各个页面使用 4)防止用户非法登陆到某个页面。

名字 String 值 String
3.session图列 session基本用法图列
4.小结:
①Session是存放在服务器的内存中
②一个用户浏览器,独享一个session域对象
③Session中的属性的默认生命周期是30min,可以通过web.xml来修改-->对比
a.修改tomcat/conf/we
b.xml修改则会对所有的web应用都修改
b.修改该web应用下的web.xml修改 ----> 对当前web应用如果和a冲突则以
b为准
<session-timeout>minute</session-timeout>
c.在servlet中修改:session.setMaxInactiveInterval(int seconds)可是
有深刻内涵:如果在seconds时间内没有访问,则此session就over,如果访问了,则又有seconds时间存活。

④Session中可以存放多个属性(包括对象)
⑤如果session.setAttribute(name,value);中name相同,则会替换掉。

5.深入理解Session用户
服务器是如何实现一个session为一个用户浏览器服务的?
实际案例:防止用户非法登陆 ----> 登陆成功后,可以把该用户信息存放到session,然后在需要验证的页面中获取用户信息,如果为null,则打回去
Session和Cookie:
1.关闭浏览器后,再开浏览器,上次购买的商品还在---->涉及到s e s s i o n 的销毁时间
2.I E禁用C o o k i e后,S e s s i o n就不在有任何意义(w h y?如何解决?)
由于session是借助cookie传递的有图例分析。

注意:没有cookie时是一个Cookie:JESSIONID
有了Cookie时是两个Cookie:JESSIONID 一个是session一个是cookie。

Session和Cookie的比较:
1.Cookie是放在客户端的,Session存放在服务器端
2.Cookie在客户端以文件形式存放,Session存放在web服务器内存中
Session VS Cookie
1.存储位置不同
Cookie存在在客户端(临时文件夹)
Session存在服务器内存中,一个session域对象为一个用户浏览器服务
2.安全性
Cookie以明文方式存放在客户端,安全较弱,可以通过MD5加密算法在存放
Session存放在服务器端内存中,所以安全性较好
3.网络传输量
Cookie会传递信息给服务器
Session的属性值不会给客户端
4.生命周期
Cookie的声明周期是累计时间
Session的生命周期是访问session的间隔时间,在一些情况下session也会失效:关闭tomcat,reload web应用,时间到,调用invalidate()[安全退出]
5.从访问范围
Session为一个浏览器独享
Cookie为多个用户浏览器共享
因为session会占用服务器的内存,因此不要向session存放过多、过大的对象,会影响性能。

相关主题