自己总结一些会话跟踪的知识点,希望对大家有帮助!
1. 什么是会话跟踪
对同一个用户对服务器的连续的请求和接受响应的监视
2.举例阐述四种会话跟踪技术的特点,应用场景
会话跟踪常用的方法:
① URL重写:URL(统一资源定位符)是Web上特定页面的地址,URL重写的技术就是在URL结尾添加一个附加数据以标识该会话,把会话ID通过URL的信息传递过去,以便在服务器端进行识别不同的用户
url?参数名=值&参数名=值··········
例如:
<div class="menu_title"> <a href="oneArticle.jsp?id=<%=rs.getInt("id")%>"> <%=rs.getString("articletitle")%></a> <%=rs.getString("articletime")%> <a href="lanmu.jsp"> <%=rs.getString("menuname")%></a> </div>
rs.getInt("id")这是通过数据库查询出来的,这个ID它是标识了唯一一条用户资料的信息,并且将这个ID数据传给oneArticle.jsp这个jsp页面。
②隐藏表单域:将会话ID添加到HTML表单元素中提交到服务器,此表单元素并不在客户端显示
<form action="updateinfoChat.jsp" method="post"> <input type="hidden"name="userid"value="<%=userid%>"/> 帐号:<%=rs.getString("username") %><br/> 密码:<input type="password" name="userpwd" value="<%=rs.getString("userpwd")%>" /><br/> 确认密码:<input type="password" name="userpwd2"/><br/> Email:<input type="text" name="email" value="<%=rs.getString("useremail")%>"/><br/> 电话:<input type="text" name="tel" value="<%=rs.getString("usertel")%>"/><br/> 个性签名:<input type="text" name="userdesc" value="<%=rs.getString("userdesc")%>"/><br/> <input type="submit" value="确认修改"/> </form>
<input type="hidden"name="userid"value="<%=userid%>"/>
这个就是通过隐藏表单域来实现会话跟踪。
③ Cookie:Cookie是Web服务器发送给客户端的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将Cookie发送到客户端,在客户端可以进行保存,以便下次使用。
客户端可以采用两种方式来保存这个Cookie对象,一种方式是保存在客户端内存中,称为临时Cookie,浏览器关闭后这个Cookie对象将消失。另外一种方式是保存在客户机的磁盘上,称为永久Cookie。以后客户端只要访问该网站,就会将这个Cookie再次发送到服务器上,前提是这个Cookie在有效期内。这样就实现了对客户的跟踪。
Cookie是可以被禁止的。
//创建Cookie对象
Cookie cookieName = new Cookie("userName",userName);
cookieName.setMaxAge(60*60);
//将cookie对象响应给客户端
response.addCookie(cookieName);
//创建Cookie对象
Cookie cookiePwd = new Cookie("userPwd",userPwd);
cookiePwd.setMaxAge(60*60);
//将cookie对象响应给客户端
response.addCookie(cookiePwd);
将用户的账号和密码存到cookie里面,组成一个cookie数组,通过cookie数组可以随时获得用户的账号和密码。
④ session:
每一个用户都有一个不同的session,各个用户之间是不能共享的,是每个用户所独享的,在session中可以存放信息。
在服务器端会创建一个session对象,产生一个sessionID来标识这个session对象,然后将这个sessionID放入到Cookie中发送到客户端,下一次访问时,sessionID会发送到服务器,在服务器端进行识别不同的用户
Session是依赖Cookie的,如果Cookie被禁用,那么session也将失效
session.setAttribute("user", userName);
session.setAttribute("userid", userid);
将用户的账号和密码存到session对象里面,通过session对象随时可以获得用户的账号和密码。
3.cookie和session的共同之处在于:
cookie和session都是用来跟踪浏览器用户身份的会话方式
Cookie与Session的区别:
两个都可以用来存私密的东西,同样也都有有效期的说法,区别在于session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以在cookie生成的时候设置进去。
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K。
(5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
4.session对象的创建
HttpSession session=request.getSession();
HttpSession session=request.getSession(true);
上面二种创建session的方法效果是一样的。首先获取传递进来的在Cookie中存放的sessionID,再根据sessionID查找session对象,如果没有找到将创建一个新的session对象,并保存到Cookie中发送到客户端。如果找到了,就将session对象赋予给引用
HttpSession session=request.getSession(false);
如果不存在会话的时候不想创建新的会话
这种方式创建过程: 首先获取传递进来的在Cookie中存放的sessionID,再根据sessionID查找session对象,如果没有找到将返回null,如果找到了,就将session对象赋予给引用
5.访问与会话相关联的信息
HttpSession 对象存在于服务器上,他们并不在网络上传输,它们只是通过某种后台运作机制比如cookie或url重写自动与客户关联起来。Session对象拥有内建的数据结构散列表,存储任意数量的键与键值的对。
Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态