web开发中必须掌握的会话技术 cookie和session

说一下在web开发中必须掌握的会话技术,cookie和session。

 什么是会话?

简单理解:在浏览器逛淘宝时 进入淘宝网站的时候,就与淘宝网站建立了一个会话 ,每次点击的商品连接 都属于淘宝网站,都还是这个会话,当我们把这些网页全部关闭时,这次会话就结束了,

cookie:在服务器创建,在客户端保存(在客户端的临时文件夹中保存) ,生命周期可设置,若不设置,则该cookie的的生命周期仅仅在浏览该网站的时间,关闭该网站页面后,cookie被删除。

    cookie作用:保存上次登录该网站时间地点(在本次登陆时提示上次登录的时间 地点(IP地址)等),保存用户名密码等(下次登陆时不需要输入用户名和密码,默认填写),记录用户的喜好(购物型网站)

cookie原理:可看成一张表,有两个参数,名字,值 一个cookie只能存放一个值

cookie重名:当重名时 替换已存在的cookie值。

cookie安全问题:由于信息在cookie中以明文保存,所以要考虑安全问题,要将信息加密。当前流行加密算法为MD5加密算法



cookie的数量问题:一个浏览器最多放300个cookie 一个web站点最多20个cookie,每个cookie的大小限制为4kb。

设置cookie生命周期:setMaxAge(int num)参数为该cookie保存的时间,默认为0即随着会话的结束cooki失效;

				    若参数为负数,则相当于该cookie的生存时间为0.时间到后,cookie'失效(与session区别开)。

cookie在实际应用中的中文乱码问题:在cookie中存入中文时有乱码的问题;将中文用指定的编码格式编码即可:String value = java.net.URLEncoder.encoder("你好","utf-8");然后,将value值写入cookie中。

在读cookie时需要解码:对有中文的cookie进行解码(base64解码);

将cookie中的value值进行解码:String value = java.net.URLDecoder.decode(cookie.getValue(),"utf-8");

cookie在谷歌浏览器中怎么查看:
点击url前,刷新按钮后的那个锁,就可以看到了


session:
    session是服务器端技术,当用户进入网站后,网站为其创建一个该用户独享的session对象,用户在访问web资源时,将各自的数据存放在session中,

session作用:验证码等,
session原理:一张表,两个参数(name,Object),一个session可存放多个值

session重名:同cookie ,会替换。

session生命周期:默认30分钟(在该时间内,没有访问该session,则该session失效,若在该事件内访问了该session,则重新开始计时)(同时,关闭服务器或web项目时,session也会消失)可更改,

        三种方法:

	1)在服务器的配置文件中修改,tomcat服务器中:在apache-tomcat-8.0.49-windows-x64\apache-tomcat-8.0.49\conf中的we.xml中找到session(搜索关键字session就可以找到 <session-timeout>30</session-timeout>)30就是30分钟的意思。

	2)利用方法修改:session.setMaxInactiveInterval(30);参数为发呆时间(单位为秒),即在此事件内保存,若在该时间段内客户端无操作,,则删除该session,若有操作,则重新计时;

	3)在该项目的web.xml文件中设置,在web.xml文件中添加<session-config></session-config>选项,并在其中添加<session-timeout>时间</session-timeout>

	总结:三种方法不同点:

	         1)是对该tomcat服务器上运行的所有web项目设置session

          	         2),3)是对当前项目的session设置生命周期,与其他项目无关;

  	         若两种配置冲突时,等级高的优先,当前web的配置优先,所以,以当前web的配置为准。

	session的失效也有方法:即调用后session失效,invalidate()方法,安全退出功能的原理就是清除session

			    removeAttribuate(String name)让session中的指定值失效。

	   

session注意:设置session时,时间只能精确到分钟,不能精确到秒及以下。	

cookie和session一个在客户端,一个在服务器端,那客户端怎么指导知道在服务器端有它的session呢?

首先,客户端第一次访问之前,服务器端无session,客户端无cookie,在第一次的访问中,该web应用在服务器端创建了session,这个session会有一个id号,这个id号会通过http协议发送给为客户端,形式以cookie1的形式,同时创建了cookie2(保存用户信息),并通过http协议发送到了客户端进行保存,

在下一次的客户端发给服务器端的http请求中,就会包含有session的id信息,服务器端接收到后,在服务器内存中查找该id的session信息;若session已失效,服务器会将该session删除(比如登录超时,重新登陆等)。

那么可以想象在客户端保存session的id的cookie的存活时间为浏览结束时失效,事实也是如此,可以在cookie中查看。名为“JSESSIONID”的cookie即为session的id。

总结:cookie和session是互相联系的,不能缺少。但是有的客户会将自己电脑上的浏览器设置禁用cookie,这怎么办呢?浏览器设置禁用cookie后,将收不到服务器端发来的cookie,也就没有办法利用session,

解决方法有两个:

1 当用户设置了禁用cookie后,浏览我们的web应用时,我们给出提示:

打开cookie,让客户浏览器将cookie打开;

2 利用url重写技术,来实现。

    以下关于url重写的内容转载于网上,链接见下面:

java中的url重写
java中的url重写,可以让浏览器不支持cookie或禁用cookie时使用session。

session默认是在cookie中保留并进行跟踪的,如果禁用了cookie,url重写会在每个链接后面加入一个jsessionid,用以跟踪会话。

url重写功能是HttpServletResponse类的encodeURL方法提供的,JSTL中的<c:url>标签也会有这个功能。

链接:https://www.xuebuyuan.com/1533663.html

发布了4 篇原创文章 · 获赞 1 · 访问量 281

猜你喜欢

转载自blog.csdn.net/weixin_43498703/article/details/105540480