本文共 5825 字,大约阅读时间需要 19 分钟。
会话跟踪技术是用来跟踪用户的会话,并且保持对用户会话之间的数据管理。
其中常用的会话跟踪技术是Cookie
和Session
Cookie
是客户顿请求服务器端后,服务器给客户端的一个标识,并保存在客户端中。
当客户端再次向服务器端发送请求时,会携带该标识,服务器就可以根据标识来识别客户端的身份或者状态。
1.保持用户登录状态
将用户信息保存到Cookie中,并发送到浏览器中。将有效时间设置为一个较长的时间,这样子下次浏览器在进行访问一个网站时,服务器还能根据标识来识别用户。根据识别用户,用户就不需要输入用户名和密码等信息。
2.记录用户名
⼀旦⽤户登录成功以后,下次再登录时,直接将Cookie中的⽤户名读取并显示出来,这样⽤户就不需要再次输⼊⽤户名,只输⼊密码即可。
1.首先在重写的post方法中创建Cookie对象。根据对象与信息的匹配处理,返回到JSP页面进行响应。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1、输出信息。 req.setCharacterEncoding("utf-8"); String uname=req.getParameter("username"); String upass=req.getParameter("password"); System.out.println(uname+": "+upass); if ("小艾扶".equals(uname)&&"123".equals(upass)){ //登陆成功 System.out.println(uname+": "+upass); resp.sendRedirect("success.jsp"); } else{ //1.创建cookie对象 Cookie cookie = new Cookie("un",uname); //2.设置Cookie的有效时间。当前时间为0.进行如上举例时要切记删掉。 cookie.setMaxAge(0); //3.返回给前端 resp.addCookie(cookie); resp.sendRedirect("index.jsp"); } }
doPost
方法,因为在进行登录注册时候,对信息是较为保密的状态。进行post
对安全性更加严谨。doGet
方法可以仍意补充。cookie
对象时,需要声明好进行标识的地方(例如我上面只标识了账号名)。声明之后进行返回给前端进行响应。2.其次在项目中的index.jsp
中将响应回来的cookie对象进行处理,并显示于前端的界面中。
<% Cookie[] cookies = request.getCookies(); String value=""; if(cookies.length>0){ //先判断里面是否有内容 for (Cookie cookie:cookies){ if (cookie.getName().equals("un")){ value=cookie.getValue(); break; } } pageContext.setAttribute("unamecookie",value); } %>
<form>
表单,它将模拟一个登录的简单功能。<%%>
中填下如上代码。首先是获取java文件中获取cookie信息,对长度进行判断(如果为空的时候,直接进入for循环会有报错的现象呢!)。<input>
中添加value
值。最后会发现登陆之后返回,账号名会自动出现在上面哟~
//setMaxAge⽤来设置Cookie的最⼤有效时间,需要int型的参数,代表有效的秒数 cookie.setMaxAge(秒数); //当参数⼤于0时,会设置为指定的秒数 cookie.setMaxAge(30); //当参数等于0时,浏览器不会保存Cookie,Cookie⽴即失效 cookie.setMaxAge(0); //当参数⼩于0时,和不设置是⼀样,当前会话有效 cookie.setMaxAge(-100); //设置⼀个永久有效的Cookie,并⾮永久,只是使Cookie的⽣命很⻓⽽已 cookie.setMaxAge(60*60*24*365*10);
在前面的学习中知道,Session主要进行的是会话的机制。但与此同时,Session是另一种记录客户状态的机制。
如果说Cookie机制是通过检查客户身上的“通⾏证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建⽴的⼀份客户档案,客户来 访的时候只需要查询客户档案表就可以了。
对于Session
而言,它对应的类是为javax.servlet.http.HttpSession
类。每个来访者对应⼀个Session
对象,所有该客户的状态信息都保存在这个Session
对象⾥。Session
对象是在客户端第⼀次请求服务器的时候创建的。
Session
也是⼀种**key-value
的属性对**,通过getAttribute(Stringkey)
和setAttribute(String key, Objectvalue)
⽅法读写客户状态信息。Servlet
⾥通过request.getSession()
⽅法获取该客户的Session
HttpSession session = request.getSession(); // 获取Session对象session.setAttribute("loginTime", new Date()); // 设置Session中的属性out.println("登录时间为:" +(Date)session.getAttribute("loginTime")); // 获取(将其转换为Data对象进行获取时间)//Session属性
Session
放在内存中。每一个用户都有一个独立的Session
。Session
内容过于繁多,则容易造成内存溢出。如上所示,这些都是Session的常用方法。
Cookie
数据保存在客户端,Session数据保存在服务器端。Session
是由应⽤服务器维持的⼀个服务器端的存储空间,⽤户在连接服务器时,会由服务器⽣成⼀个唯⼀的SessionID,⽤该SessionID 为标识符来存取服务器端的Session存储空间。⽽SessionID这⼀数据则是保存到客户端,⽤Cookie保存的,⽤户提交⻚⾯时,会将这⼀SessionID提交到服务器端,来存取 Session数据。这⼀过程,是不⽤开发⼈员⼲预的。所以⼀旦客户端禁⽤Cookie,那么Session也会失效。过滤器就是对web资源进⾏拦截,通过做⼀些处理后再交给下⼀个过滤器或servlet
处理,通常都是⽤来拦截request
进⾏处理的,也可以对返回的response
进⾏拦截处理。
1.创建一个类,实现Filter
接口。
public class CharSetFilter implements Filter{ }
2.重写接口中的方法
public void destroy() { //销毁的⽅法}public void doFilter(ServletRequest req, ServletResponse resp, FilterChainchain) throws ServletException, IOException { //过滤⽅法 主要是对request和response进⾏⼀些处理,然后交给下⼀个过滤器或Servlet处理 chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { /*初始化⽅法 接收⼀个FilterConfig类型的参数 该参数是对Filter的⼀些配置*/ }
3.在web.xml
中进行设置
过滤器名称 过滤器所在的路径 过滤器名称 需要过滤的资源
1.如何防⽌⽤户未登录就执⾏后续操作
String name=(String)session.getAttribute("key"); if(name==null){ //跳转到登录⻚⾯ }
2.设置编码⽅式–统⼀设置编码
3.加密解密(密码的加密和解密)
4.⾮法⽂字筛选
**5.下载资源的限制 **
过滤器的特点:在servlet之前和之后都会被执⾏
监听就是在监听某个域对象的状态变化的一个组件。
监听器的编写步骤(重点)
对象 | 作用 | 生命周期 |
---|---|---|
ServletContextListener | 监听ServletContext 域的创建与销毁的监听器 | 创建:服务器启动创建删除:服务器关闭 |
HttpServletListener | 监听HttpServietListener 域的创建和销毁的监听器 | 创建:第一次调用request.gerSession 方法时创建销毁:服务器关闭销毁,Session 过期 |
ServletRequestListener | 监听ServletRequest 域的创建与销毁的监听器 | 创建:每一次创建时会调用一次request 。销毁:请求关闭 |
ServletContextListener
的作用:
HttpServletListener
的作用:
默认创建Session下,可以统计网站访问的用户。
转载地址:http://oegdi.baihongyu.com/