JavaWeb-session管理

Session追踪的四种方式


网址重写

网址重写将一个或多个token作为查询字符串添加在url中,token一般就是k-v对
url?k1=v1&k2=v2…&kn=vn

如果token不必在多个url上携带,那么网站重写就比较合适。
网站重写比较大的缺陷就是token是显式的,在url地址栏上可以看到
所有应用网址重写必须token信息不太重要或不太需要隐藏。

隐藏域

将token放在html表单的隐藏域中。相对于网址重写,隐藏域的方式更安全,
传输的数据也更多,因为url限制字符。不需要重新编码。适用情况与网址重写相同。
只有当传输的信息不需要跨越多个页面时,才适用。

<form method="post" action="xxx.do">
	<input type="hidden" name="id" value="1"/> <!-- 隐藏域 token信息-->
	<table>
		<tr>
			<td>city</td>
			<td><input type="text" name="cityname" value="Miami"/></td>
		</tr>
		<tr>
			<input type="submit" name="submit"/>
		</tr>
	</table>
<form>

当表单传输到服务端时,就可以知道是哪个用户提交的

Cookie

重写网址和隐藏域都不适用于跨越许多页面的信息。而cookie可以解决这种情况,cookie是自动地在web服务端和浏览器之间来回传递地一小块信息。可以通常servlet添加cookie

public class MyServlet extends HttpServlet{
	@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      	Cookie c = new Cookie("username","cyl"); //cookie token也是k-v键值对
        c.setMaxAge(60); // 设置cookie的最大存活时间
        resp.addCookie(c); //添加cookie在响应体中
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doGet();
    }
}

要注意的的是, 没有getCookieByName方法获得单个cookie,每次只能一次性获得cookie数组。
request.getCookies(); 返回一个cookie数组

HttpSession对象

在所有的session追踪技术中,HttpSession对象是最强大的,也是功能最多的。
HttpSession是用户第一次请求服务器时产生的。每个用户只能访问他自己的httpsession。
request.getSession() 可以获得当前的seesion对象

httpsession通过setAttribute(String name, Object value)方法添加信息。但是httpsession的产生会消耗
服务器内存,因为httpsession在服务端产生,在他的存活时间内,它一直都驻留在服务器内存中,直到
被销毁。所以httpsession不能存储大量的数据,需要谨慎操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值