-
会话跟踪概述(Session)
-
会话的概念与作用
-
会话:浏览器与服务器一次连续的通讯过程,包含多次请求
浏览器访问-》访问页面-》关闭浏览器
-
应用场景: 常常需要记住一些状态信息
- 访问控制:下载文档必须先登录
- 简化登陆:一定时间不再需要重新登陆
- 分页
-
-
常用会话跟踪技术–包括session、cookie、input、url等
目前唯一方法:每次向服务器发送请求,主动携带身份令牌信息。这个非常的有用,也非常的灵活。
-
URL方式:需要保存的信息直接追加到URL后。
例http://localhost:8080/viewList?pageNo=1—分页
-
隐藏域方式:使用表单隐藏域保存相关信息。每次跳转的时候将会话要记录的信息带过去,下次请求再带回来。
例—表单防重复提交
-
Cookie方式:状态信息保存到客户端,服务器能够获得相关信息进行分析,从而生成对客户端的响应
例简化登陆功能可以使用Cookie方式实现–记住密码
-
Session方式:将状态信息保存到服务器会话对象中,通过唯一标记ID与客户端绑定使用
例访问控制功能 使用Session实现
例访问控制
-
HTML标签中的data属性
这个嘛,再说。
-
-
-
-
Cookie
-
Cookie的功能与特性
- Cookie:一段保存在客户端的小文本;能够将用户活动过程中的状态信息保存到客户端,服务器可获得信息以便处理,跟踪用户状态
- Chorme浏览器端查看Cookie:点击URL前的@图标查看Cookie信息
-
Cookie的域及最大生命时间
- Cookie的一系列属性
- name :cookie的名字,每个cookie都有一个名字
- content:cookie的值,与name作为键值对形式存在
- domain:域,cookie的域名 例 csdn.net
- path:路径,例访问csdn.net下该路径时,当前cookie将被发送
- created:cookie被创建时间
- expired:cookie失效时间
- 最大生命时间:expired-created 超过时间将失效,不再发送
- Cookie的一系列属性
-
Servlet中创建Cookie、设置Cookie属性
Cookie(String name,String value) //创建Cookie对象,指定名和值 setMaxAge(int expiry)//设置最大生命时间(秒),默认当前浏览器关闭,cookie失效 setValue(String newValue) //设置Cookie值 setDomain(String domain) //设置cookie域名 //例子 1.创建cookie Cookie username=new Cookie("username","zhw"); Cookie pwd=new Cookie("pwd","abc123"); //2.设置cookie生命时间,24小时内有效 username.setMaxAge(24*3600); pwd.setMaxAge(24*3600); //3.存入客户端--我的反向例子就是这样 response.addCookie(username); response.addCookie(pwd);
-
响应中设置Cookie信息
- 想将Cookie保存到客户端,需要将其添加到响应对象
- 响应接口中定义了设置Cookie的方法
- addCookie(Cookie cookie) //将Cookie对象保存到相应的响应对象中
-
获取请求中的Cookie信息
- 当访问相同域及路径时,没有超过有效时间的cookie将自动通过请求发送到网站
- 请求接口中定义了获取Cookie对象的方法
- getCookies() //获取请求中所有Cookie对象,返回数组
Cookie[] cookies=request.getCookies(); if(cookies==null){ out.println("没有cookie"); } //通过遍历cookie for(Cookie c:cookies){ out.println(c.getName()+"="+c.getValue()); }
-
-
Session
-
Session简介
- 常用策略:浏览器端–cookies保存sessionId 服务器端—开辟一个Session对象,保存身份数据。利用会话型Cookies分发令牌,构建Session对象。
- 客户端与服务器每一次会话都创建并维护一个Session对象
用户访问网站-》服务器从请求中查找名为JSESSIONID的cookie 不存在:创建新的Session对象,为其生成ID值,并存入JSESSINOID的cookie中 并将新创建的Session对象提供给本次会话使用 存在:找到JSESSIONID的cookie,获取值,以该值为ID,查找对应的Session对象给本次会话使用
-
自定义Session实现方式
- 第一次发送请求,服务端开辟一个内存,通过Cookie设置sessionid,每次请求通过cookie发送sessionId
-
HttpSession对象的获取
- HttpSession接口
- getSession() 获取与当前请求相关的Session对象,如果不存在,创建新的Session
- HttpSession接口
-
Session属性的添加、修改、删除、及Session失效的方法
- 增删改属性 同request的API
- Session失效
- 当Cookie失效 Session随之失效
- 当Session时间过期,session在服务端失效
-
-
简化登录
-
LoginServlet中,通过用户选择,创建Cookie,并指定有效时长存入响应中
- 创建Cookie并添加到客户端去 具体见上面
- 也就是说,在用户登录时,如果勾选了记住密码,那么就创建Cookie并添加到客户端中,如果下次登录存在cookie,那么就直接请求登陆就行了。
- 创建Cookie并添加到客户端去 具体见上面
-
登录页面index.jsp获取Cookie进行登录验证
Cookie[] cookies=request.getCookies(); if(cookies!=null){ for(Cookie cookie:cookies){ if(cookie.getName().equals("username")){ username=cookie.getValue(); } if(cookie.getName().equals("password")){ password=cookie.getValue(); } } } <!--如果用户名和密码都不为空,那么直接请求转发到登录请求,这里通过url携带身份令牌--> if(username!=null&&password!=null){ request.getRequestDispatcher("./loginServlet?username="+username+"&pwd="+password).forward(request,response); } 这里出现的问题就是,密码暴露。。。。
-
JavaEE基础四之会话追踪(Session、Cookie等)
最新推荐文章于 2022-02-18 20:50:04 发布