cookie和session 会话技术(重要) ##
1.会话:概念:先打开一个浏览器,浏览器的网页(资源,包含多次请求和响应),关闭整个浏览器,这个过程称为一次会话。
2.作用:通过cookie和session技术来保存用户相关的一些数据。
cookie的技术
理解cookie原理(理解)
1.cookie的原理:Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
2.看图
cookie对象的api
1.Cookie(String name, String value) cookie的构造方法:
2.String getName() 获取cookie的名称
3.String getValue() 获取cookie的值
4.void setValue(String newValue) 设置cookie的值
5.void addCookie(Cookie cookie) 在服务器端把cookie保存到客户端
6.Cookie[] getCookies() 从客户端获取cookie的数组
显示用户上次访问的时间(和Cookie的原理) /** * 1.先判断是否是第一次访问?因为:第一次访问和第n次处理的业务是不同的。 * 2.如果是第一次访问:先输出一句欢迎,记录当前的时间,保存到cookie中,回写到浏览器端。 * 3.如果不是第一次访问,获取cookie中的值(就是你上次的访问的时间),把时间输出到页面上。记录当前的时间,保存到cookie中。回写到浏览器端。 */
* 代码
cookie的api(另外)
* 演示的效果:直接关闭浏览器,cookie没有了,再访问是最新的。
* 默认的cookie:默认保存浏览器端。
* 持久的cookie:通过setMaxAge()方法,把cookie保存到本地的磁盘上。
* 注意:需求:假如编写保存用户名的代码,默认保存7天。到第5天,不想保存了,清除cookie。
* 删除保存本地磁盘上的cookie。setMaxAge(0); 但是前提条件:如果在之前的代码中设置有效路径的话,你在设置setMaxAge(0)之前必须先设置有效路径一次。
1.void setMaxAge(int expiry) 设置cookie的有效时间(单位是秒)
2.void setPath(String uri) 设置cookie的有效路径
* 有效路径:访问WEB其他资源的时候是否携带cookie内容。
* 不设置有效路径:说明我程序默认的有效路径。 /day11
* 由谁决定:LastTimeServlet访问路径是http://localhost/day11/lasttime
* 访问WEB资源下的jsp/demo1.jsp的时候:http://localhost/day11/jsp/demo1.jsp。携带了cookie的内容。
* 总结:只要是访问/day11下面的其他资源,默认携带cookie的内容。
* 把LastTimeServlet的访问路径修改了 /servlet/lasttime
* 默认的有效路径已经改变了 /day11/servlet
* 访问WEB资源下的jsp/demo1.jsp的时候:http://localhost/day11/jsp/demo1.jsp。不携带了cookie的内容。
* 不想让它有默认的有效路径,通过setPath来进行设置
3.void setDomain(String pattern) 设置cookie的有效域名
* 设置域名 cookie.setDomain(".sina.com.cn");
* 访问域名其他的内容是否携带cooikie
* www.sina.com.cn
* sports.sina.com.cn
* xxxx.sina.com.cn
商品的浏览记录
/**
* 0.获取传过来id值
* 1.判断是否是第一次访问?(获取指定名称的cookie如果为null,说明是第一次访问)
* * 如果是第一次访问,把商品的id保存到cookie中,回写cookie。
* * 如果不是第一次访问
* * 先获取cookie中的内容,进行判断(判断cookie中是否包含当前点击的商品)
* * 如果cookie中已经包含了该商品,那么就不用处理了
* * 如果不包含,在cookie中追加该商品 product=1 product=1,2
* 2.重定向商品的列表页面
* 3.需要在商品的列表页面中获取cookie的中内容,把内容显示到页面上。
*/
seesion的原理
* 看图。
session对象的api
* 获取session对象 HttpSession request.getSession() 第一次执行,在服务器的内部创建一个独享的session。如果是第二次执行,要是有钥匙的情况,不会创建新的session。
* ServletContext:代表整个WEB应用。
* session又是一个域对象。一次会话的范围。(在一次会话的过程中,可以有多次请求和响应,只要是浏览器不关闭,一直有效)
* request域对象,一次请求。
* Object getAttribute(String name) 获取域对象的属性值
* void setAttribute(String name, Object value) 设置域对象中的属性值
* void removeAttribute(String name) 删除域对象中的属性值
* String getId() 获取session id的值
* void invalidate() 手动的销毁(用户退出)
简单的购物车
* 购物车(商品的名称和数量) 对象 就使用Map cart 当前购物车了。有多次请求和响应,cart一直有,把cart存入到session中。
session的追踪(了解)
* session的追踪的技术。禁用了浏览器的cookie中。通过session回写的cookie的钥匙没有了。
* 服务器内部的session还是有的。如果你要是给我一把钥匙。
* 可以使用一些方法,在请求的后面拼接jsessionid 证明:session在服务器磁盘上,没有被销毁。
session域对象
* 域对象:用来传递数据。
* ServletContext:代表整个WEB应用。
* session又是一个域对象。一次会话的范围。(在一次会话的过程中,可以有多次请求和响应,只要是浏览器不关闭,一直有效)
* request域对象,一次请求。
session的创建和销毁
* session什么时候创建呢?第一次访问的时候,调用request.getSession(),因为没有session的id。
* session的销毁
* 非正常原因关闭服务器
* session默认销毁时间 30分钟 在tomcat/conf/web.xml 有一段配置
* void invalidate() 手动的销毁session(用户推出)