【10】 Session VS Cookie

1. HTTP协议

  • 无状态协议
    • 把每一次请求都看作是全新的请求
    • 用户之前的访问记录、视频进度都不会被保存,每次需要输入密码验证

2. 状态管理的四种方法

2.1. 隐藏域

	<input type="hidden" name="upwd" value="123">

2.2. URL重写

	也叫做URL传参、URL传值
	<%! String name = "zhangsan"; %>
	<a href="url/show.jsp?uname=<%=name %>">URL重写</a>

2.3. Cookie

(1) Cookie存放于客户端
(2) Cookie是由服务器写入到客户端的,用来标识用户
(3) Cookie实质上是文本文档(不安全)
(4) 作用

<1> 跟踪用户
<2> 统计网页访问次数
<3> 简化登录(记住用户名、密码)

(5) Cookie使用

  • 创建Cookie

        Cookie cookie = new Cookie("UNAME",name);
    
  • 设置有效时间(秒)

        cookie.setMaxAge(300);
    
  • 写入Cookie

      	response.addCookie(cookie);
    
  • 获得Cookie – Cookie类型数组

     	Cookie[] cookies = request.getCookies();
    
  • 对Cookie数组遍历

     	for(Cookie cookie : cookies){
     		cookie.getName()  // 获得名称
     		cookie.getValue()  // 获得值
     	}
    
  • 删除Cookie

      	cookie.setMaxAge(0);
    

(6) Cookie分类

<1>内存中的Cookie

不设置有效时间或设置为(-1)
关闭浏览器自动消失
不写文件

<2>文件中Cookie –淘宝使用

设置有效时间
关闭浏览器后客户端保存Cookie文件

2.4 Session

2.4.1 会话

会话,在一段时间内,单个用户与Web服务器之间的一连串的交互过程。

  1. 一次会话可以包含多次请求、响应;
  2. 如果同一用户使用两个浏览器访问服务器上的同一资源,是两个会话
  3. 服务器会为每一个会话设置唯一的标识ID ,jsessionid
    4.会话结束后,session自动清空

2.4.2 Session的使用

1. 创建Session

   (1) 获得与当前请求关联的session , 如果没有,则创建新的session
    HttpSession session = request.getSession();
    
   (2)获得与当前请求关联的session,如果有,则返回当前session;
  	   如果没有session,且参数为true,则创建新的session;
  	    如果没有session,且参数为false,则返回null;
    HttpSession session = request.getSession(false);

2. 添加属性

    session.setAttribute("UNAME",request.getParameter("uname"));

3. 获得属性(强制类型转换)

    String name = (String)session.getAttribute("UNAME");	

4. 设置有效时间(默认1800秒,30分钟)

    session.setMaxInactiveInterval(1800);

5. 清空session

    session.invalidate();

6. 获得sessionID

    session.getId();

3. Session、Cookie区别

  • session是在服务器端保存用户信息,cookie是在客户端保存用户信息
  • session的值可以保存对象,cookie的值是字符串
  • session随会话结束而关闭,cookie可以长期保存在客户端(有效期)
  • cookie通常用于保存不重要的用户信息,重要的信息使用session保存

4. 作用域/作用范围

  • JSP中,对象的作用域由小到大分为四种
    page < request <session < application

    • page : 当前一个页面的范围,相当于this
    • request:一个连续的请求,多次请求转发可以
    • session:一个会话,跨越多个页面
    • application: 整个应用程序

每一个范围都允许存放参数,参数以“键值对”形式存在,使用==setAttribute()方法存储参数,使用getAttribute()==方法获取参数

在JSP页面中,分别使用pageContextrequestsessionapplication四个隐式对象调用相应的作用域。

在EL表达式中,分别使用pageScoperequestScopesessionScopeapplicationScope四个关键字表示不同的作用域,也可以省略(省略之后按作用域从小到大顺序查找,找到即停止)

猜你喜欢

转载自blog.csdn.net/Spectre_win/article/details/89001792