JavaWEB session对象与Cookie对象

一、session对象

1.session是什么?

session在网络中被称为会话。
由于HTTP协议(超文本传输协议)是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。
为了弥补这一缺点,HTTP协议提供了session
通过session可以在应用程序的WEB页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。
但是,如果在一个会话中,客户端长时间不向服务端发出请求,session对象就会自动消失。这个时间取决于服务器,例如,Tomcat服务器默认为30分钟。不过这个时间可以通过编写程序进行修改。

实际上,一次会话的过程也可以理解为一个打电话的过程。通话从拿起电话或手机拨号开始,一直到挂断电话结束,在这个过程中,可以与对方聊很多话题,甚至重复的话题。一个会话也是这样,可以重复访问相同的Web页。

2.运行机制


当一个session开始时,Servlet容器将创建一个Httpsession对象,在Httpsession对象中可以存放客户状态的信息(例如购物车)。
Servlet容器为Httpsession分配一个唯一标识符,称为session ID。 Servlet容器把session
ID作为Cookie保存在客户的浏览器中。
每次客户发出HTTP请求时,Servlet容器可以从HttpServletRequest对象中读取session
ID,然后根据session ID找到相应的Httpsession对象,从而获取客户的状态信息。

3.session对象的生命周期
session对象的生命周期:创建---->使用----->消亡

以下3种方法可以结束session对象:
a. 关闭浏览器;
b. 请用HttpSession的invalidate()方法;
c. session超时。

(1)创建

//当客户端浏览器第一次访问服务器时,服务器为这个浏览器创建一个Session对象。
//在服务器端使用request.getSession()或request.getSession(true)方法来获得Session对象。   
   request.getSession()    //获得Session对象
   session.getId()        //获得session对象的ID


(2)使用

 //创建Session对象后,使用Session对象进行数据的存取和传输。
    session.setAttribute(String name, Object obj)    //将信息保存在session范围内
    session.getAttribute(String name)        //获取保存在session范围内的信息
    session.getAttributeNames();     //返回Session对象中存储的每一个属性对象,枚举型
    session.isNew();            //判断session对象是不是新的

    //具体过程:
    //a. 将产生的sessionID存入到Cookie中;
    //b. 当客户端再次发送请求时,会将sessionID和request一起传送给服务器端;
    //c. 服务器根据请求过来的SessionID与保存在服务端的Session对应起来,判断是否为同一个Session。


    //注意:getAttribute()方法返回的是Object对象,如果将获取的信息赋值给String类型的变量,则需要进行强制类型转换或调用其toString()方法,例如,下面的两行代码都是正确的。
    String user = (String)session.getAttribute("username");
    String user1 = session.getAttribute("username").toString();

(3).设置Session对象的有效期

//a. 调用setMaxInactiveInterval(long n)进行设定;
// b. 在web.xml中修改:
    <session-config>
     <!-- 会话超时间长为30分钟 -->
    <session-timeout>30</session-timeout>
    </session-config>


(4).Session对象的判断

Srting username=session.getAttribute("username");
if(username==null){
response.sendRedirect("login");
}


二.Cookie

   1. 概述

        (1)用来存储客户端的一小段文本
        (2)是一门客户端的技术,将数据保存到客户端;因为cookie是存储在客户端浏览器中的
        (3)是为了实现 客户端与服务器端之间的状态的保持
        (4)cookie技术,不安全,不要使用cookie存储敏感信息!比如登录状态和登录信息;
        (5)一些敏感的数据 应该存储在服务器端

   2. 常用方法       

void setMaxAge(int e);
    ** 设置Cookie有效期,单位秒,正数为多少秒后失效;负数表示当浏览器关闭时,Cookie将会被删除(争议);零表示清空Cookie

        int getMaxAge();
    ** 获取Cookie有的效时间,单位秒
        void setValue(String value);
    ** 在Cookie创建后,对Cookie进行赋值
        String    getValue();
    ** 获取Cookie的值
        String    getName();
    ** 获取Cookie的名称
         Cookie[]    getCookies();
    ** 获取Cookie中所有的属性名

    3.使用方式

		   //Cookie对象
		(1)创建Cookie对象,绑定数据(在服务器端获取指定数据通过cookie保存)
			 Cookie cookie = new Cookie(key,value);
		(2)发送Cookie对象(从服务端---》客户端)
			 response.addCookie(cookie)
		(3)获取Cookie,获取数据(另外页面接收,读取内容)
			 Cookie [] cookies = request.getCookies()
		<%
		String username=request.getParameter("username");
		//1.创建Cookie保存用户名
		Cookie cookieUserName = new Cookie("username", username);
		//2.写入客户端
		response.addCookie(cookieUserName);
		//3.获取Cookie,获取数据
		Cookie[] cookies = request.getCookies();
		if (null != cookies) {
			for (Cookie cookie : cookies) {
				if ("username".equals(cookie.getName())) {
					username = cookie.getValue();
					break;
				}
			}
		}
		
		//注:setMaxAge() 设置cookie的存活
		//cookie.setMaxAge(1*60*60*24*7);
		
		//Cookie注意事项:
		//1.如果保存的时候有特殊字符:空格  &  -  需要编码和解码这个动作
		//解决方法:
		//URLEncoder.encode(s, "UTF-8");//编码
		//%1BF%123%
		//URLDecoder.decode(s, "UTF-8");//解码
	%>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值