【无标题】

会话以及会话管理技术
1.会话概述:
什么是会话:从登录淘宝,多次刷新网页,到最终退出淘宝,整个过程就是一次会话。
会话的特点:包含多个请求,一次完整的会话针对一个用户。
会话管理技术:
第一种:cookie技术,客户端技术。
第二种:session技术,服务端技术。
购物车案列:买完商品后,加入购入车,买的商品存到什么对象比较合适?
1.使用request域对象保存商品信息:
结论:使用request保存商品信息不可以,因为每次发送请求,都会产生一个新的请求对象。
2.使用ServletContext域对象保存商品信息
结论:使用ServletContext对象保存商品信息,可以,但是不合理。
所以在开发中,保存会话过程中产生的数据,采用会话管理技术,也就是使用cookie和session技术
来保存会话过程产生的数据。、
2.Cookie对象
1.1 什么是cookie:
Cookie是一种会话管理技术,它是用来保存会话过程中产生的数据,然后在浏览器和服务器交互时,
会使用cookie里面保存的数据。
注意:首次访问服务器,浏览器不会携带cookie到服务端。

1.2 Cookie常用的API
    1.构造方法:
	    1.得到cookie对象:Cookie cookie = new Cookie(String key,String value);
    2.Cookie类常用的方法:
	    2.回写(响应)cookie到浏览器端: response.addCookie(cookie);
	    3.得到cookie的名称 :String key= cookie.getName(),
	      得到cookie的值:   String value =cookie.getValue();
	    4.给cookie设置生命时长: setMaxAge(int sr);
	       比如:cookie.setMaxAge(60*60*24*7),说明cookie能存活7天;
	       cookie分类:
		第一类:会话级别cookie,浏览器关闭,cookie对象就销毁了。
		第二类:持久化cookie,通过setMaxAge这个方法来设置。
	    5.给cookie设置路径,设置域名:
	      setPath(路径的url),setDomain(域名);
	      比如:域名就是服务器名称,比如说:www.baidu.com
	    6.得到cookie: Cookie[] cookies = request.getCookies();

 1.3 显示用户的上次访问时间:
    实现步骤:
    1.判断是否是首次访问:
        如果cookie里面有时间,说明就不是第一次访问。
    2.如果是第一次访问,创建cookie,保存时间,把这个cookie回写到浏览器端。
    3.如果不是第一次访问,把时间回写到浏览器,记住当前时间,把时间保存cookie里面。

public class Interview_time {

public ResultInfo Interview(HttpServletRequest request, HttpServletResponse response,String id) throws IOException {

response.setContentType("text/html;charset=utf-8");


ResultInfo info = new ResultInfo();


Cookie[]  cookies = request.getCookies();
boolean flag = false;//没有cookie时为false

try{

    if(cookies!=null&&cookies.length>0){
        for(Cookie cookie:cookies){
 
            String cookie_id = cookie.getName();
            System.out.println("cookie_id="+cookie_id);
   
            if(id.equals(cookie_id)){
     
                flag = true;



                Date date = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                String str_date = sdf.format(date);
                System.out.println("编码前:"+str_date);

                str_date = URLEncoder.encode(str_date,"utf-8");
                System.out.println("编码后:"+str_date);
                cookie.setValue(str_date);
                cookie.setMaxAge(60*60*24*30);//一个月
                response.addCookie(cookie)
                //获取Cookie的value,时间
                String value = cookie.getValue();
                //解码
                value = URLDecoder.decode(value,"utf-8");
                System.out.println("解码后:"+value);
                info.setFlag(flag);
                info.setErrorMsg(value);
                break;
            }
        }
    }
    if(cookies==null||cookies.length==0||flag==false)
        Date date  = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String str_date = sdf.format(date);
        System.out.println("编码前:"+str_date);

        str_date = URLEncoder.encode(str_date,"utf-8");
        System.out.println("编码后:"+str_date);

        Cookie cookie = new Cookie(id,str_date);
        //设置cookie的存活时间
        cookie.setMaxAge(60 * 60 * 24 * 30);//一个月
        response.addCookie(cookie);

        info.setFlag(flag);
        info.setErrorMsg("none");
    }
}catch (NullPointerException e){
    e.printStackTrace();
    info.setErrorMsg("no_display");
    info.setFlag(true);
}
主页面
<script>
    $(function () {

        $("#but").click(function () {
            var username = $("#username").val();//获取输入的用户名
            $.post("interviewTimeServlet",{username:username},function (data) {
                if (data.flag){
                    alert("欢迎用户:"+username+",上次访问的时间是:"+data.errorMsg);
                } else {
                    alert("欢迎用户"+username+",首次访问");
                }
            })

        })
    })
</script>
提交

@WebServlet("/interviewTimeServlet")
public class InterviewTimeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding(“utf-8”);

    response.setContentType("text/html;charset=utf-8");
    //获取用户名
    String username =request.getParameter("username");

    //创建对象,并调用方法来查询访问时间
    ResultInfo info = new ResultInfo();
    info = new Interview_time().Interview(request,response,username);

    //响应数据
    ObjectMapper mapper = new ObjectMapper();
    response.setContentType("application/json;charset=utf-8");
    mapper.writeValue(response.getOutputStream(),info);

}

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

}
第一次登录
请添加图片描述

Session对象
1.1 什么是session
session是一种会话管理技术,session用来保存会话过程中的数据,保存的数据存储到服务器端。
session原理:基于cookie实现的,更确切的说是基于会话级别的cookie实现的。
1.2 HttpSession API
session常用方法:
>>> 1.得到session的id(JESSIONID对应的值): getId();
>>> 2.设置session的生命时长:setMaxInactiveInterval(int interval)
>>> 3.销毁session: invalidate();
得到session: HttpSession session = getSession();
session域对象:作用范围一次完整的会话(包含多个请求)
>>> 1.存值: setAttribute(String key,Object obj);
>>> 2.取值: Object obj =getAttribute(String key);
>>> 3.移除: removeAttribute(String key);
总结域对象:request域对象 session域对象 servletContext域对象,作用范围以次变大。
request域对象:作用范围一次请求,通常和转发操作配合使用
session域对象:作用范围一次会话,通常和重定向操作配合使用
servletContext域对象:作用范围整个项目,和重定向、转发操作都可以配合使用。

1.3 Session 超时管理
    session对象是有生命时长的,它的默认存活时间是30分钟。
    具体配置找tomcat软件的conf目录下的web.xml文件,如下:
	    <session-config>
			<session-timeout>30</session-timeout>
	    </session-config>
    立即销毁session对象:invalidate();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值