会话

会话管理详解

1: 概念:  会话可简单理解为: 用户开一个浏览器, 点击多个超链接, 访问服务器多个web 资源, 然后关闭浏览器, 整个过程为之一个会话


2 : cookie 

     2.1  一个cookie 只能表示一种信息, 它至少罕有一个标识信息名称和设置值

     2,2 一个web站点可以给浏览器发送多个cookies , 一个浏览器可以存储多个站点提供cookies 

     2.3 浏览器可以存储300个cookies, 一个站点可以存放20个

     2.4  如果创建一个cookies, 并将它发送到浏览器, 默认情况下他是一个会话级别

     2.5 cookie 存储中文

   

Cookie cookie = new Cookie("userName", URLEncoder.encode("孤傲苍狼", "UTF-8"));
 response.addCookie(cookie);

3 : session 

     3.1 概念: 服务器为每个用户创建会话对象, 一个浏览器独占一个session 对象, 因此,在需要保存用户数据, 

      服务器可以把数据写到用户独占的浏览器中去。 


4: session 和 cookie 区别

      cookie 是把用户的数据写给用户浏览器, 

     session 技术吧用户的数据写到用户独占的session 

     session 对象由服务器创建, 开发人员可以调用request 对象的getSession方法得到session 对象

5 session的原理

    服务器创建session 出来后, 会把session 的id 号,以cookie的形式给客户机, 这样,只要客户机的浏览器不关, 再去访问服务器是, 都会

着session的id 号去, 服务器发现客户机浏览器带着session id 过来了, 就会使用内存中与之对应的session 为之服务。 

   

package xdp.gacl.session;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SessionDemo1 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setCharacterEncoding("UTF=8");
        response.setContentType("text/html;charset=UTF-8");
        //使用request对象的getSession()获取session,如果session不存在则创建一个
        HttpSession session = request.getSession();
        //将数据存储到session中
        session.setAttribute("data", "孤傲苍狼");
        //获取session的Id
        String sessionId = session.getId();
        //判断session是不是新创建的
        if (session.isNew()) {
            response.getWriter().print("session创建成功,session的id是:"+sessionId);
        }else {
            response.getWriter().print("服务器已经存在该session了,session的id是:"+sessionId);
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}


  刷新后




request.getSession()方法内部新创建了Session之后一定是做了如下的处理


//获取session的Id
String sessionId = session.getId();
//将session的Id存储到名字为JSESSIONID的cookie中
Cookie cookie = new Cookie("JSESSIONID", sessionId);
//设置cookie的有效路径
cookie.setPath(request.getContextPath());
response.addCookie(cookie);

session 的创建和销毁

 创建

//使用request对象的getSession()获取session,如果session不存在则创建一个
HttpSession session = request.getSession();
//获取session的Id
String sessionId = session.getId();
//判断session是不是新创建的
if (session.isNew()) {
    response.getWriter().print("session创建成功,session的id是:"+sessionId);
}else {
    response.getWriter().print("服务器已经存在session,session的id是:"+sessionId);
}

销毁

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <!-- 设置Session的有效时间:以分钟为单位-->
    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>

</web-app>

当需要在程序中手动设置Session失效时,可以手工调用session.invalidate方法,摧毁session。

1 HttpSession session = request.getSession();
2 //手工调用session.invalidate方法,摧毁session
3 session.invalidate();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值