JSP中的Cookie和Session

1. cookie

1.1 什么是****cookie

       浏览器访问服务器时,服务器会将一些数据(少量的,4KB左右)以set-cookie消息头的方式发送给浏览器。浏览器会将这些数据保存下来(内存、或者以文件的形式保存在硬盘上)。当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送过来。

1.2 如何创建****cookie

Cookie cookie=new Cookie(String name,String value); response.addCookie(cookie);

1.3 如何查询****cookie

Cookie[] cookies=request.getCookies();

       需要注意的是:该方法可能返回null

       遍历该数组:

String cookieName=cookie.getName(); String cookieValue=cookie.getValue();

    1.4 编码问题

       cookie的值只能是ascii字符,对于中文,需要将其转换成对应的ascii字符的表示形式:

String code=URLEncoder.encode(String str,String code);//编码 String string=URLDecoder.decode(String str,String code);//解码

    **1.5 **cookie的生存时间

cookie.setMaxAge(int sec);//设置cookie的生存时间,单位秒

       sec>0:浏览器会将cookie的值最多保存sec秒,如果浏览器关闭,会将cookie保存到硬盘上

       sec=0:立即删除该cookie

       sec<0:(缺省值)将cookie保存到内存中,如果浏览器关闭,cookie则被删除。

    **1.6 **删除Cookie

        如果要删除一个名叫userprofile的cookie:

Cookie cookie=new Cookie(“userprofile”,””);//创建一个相同的cookie,这一个Cookie会去替换原来的cookie。 cookie.setMaxAge(0);//将新的cookie的生存时间设置为0 response.addCookie(cookie);//添加到response对象中

    1.7 路径问题

       浏览器向服务器发送请求时,会比较要访问的地址与cookie的地址(路径)是否匹配,只有匹配的cookie才会发送给服务器。

       cookie有一个默认的路径,等于创建该cookie的组件的路径。比如:

       在Web/app1/addCookie.jsp创建了一个cookie,则该cookie的路径等于“/Web/app1”.

       在”/Web/app1”相同的路径中,可以获取该cookie.

       设置cookie的路径:cookie.setPath(String path);

   例如:cookie.setPath(“/Web”);

规则**:** cookie的路径必须是要访问的路径的上层目录戒者是不要访问的路径相等,浏览器 才会将cookie发送给服务器。

一般可以设置setPath("/appname"),表示访问该应用下的所有地址,均会发送cookie。

    **1.8 **cookie的限制

   cookie可以禁止

      cookie的大小有限制(4k左右)

      cookie的数量也有限制(浏览器大约能保存300个)

      cookie的值叧能是字符串,要考虑编码问题。

      cookie不安全

2. session

2.1 什么是****session

       浏览器在访问服务器时,服务器会在内存空间里创建一个session对象(该对象有一个唯一的ID号,类似于人的身份证号码,称之为sessionID)。服务器默认情况下会将sessionID以cookie的形式发送给浏览器,浏览器再次访问服务器时,会将sessionID发送过来,服务器可以通过sessionID找到对应的session对象。

2.2 如何获得****Session

HttpSession session=request.getSession(); HttpSession session=request.getSession(boolean flag);

       这两个方法都返回一个符合HttpSession接口要求的对象(session对象)。

       当flag=true;服务器会先检查请求当中是否有sessionID,如果没有,则创建一个session对象;如果有,服务器会依据该sessionID查找对应的session对象。如果找到则返回该对象,找不到则创建一个新的session对象。

       当flag=false;服务器会检查请求中是否有sessionID,如果没有,返回null;如果有,服务器根据sessionID查找对应的session对象,如果找到,则返回,找不到则返回null.

       注意:request.getSession()是request.getSesstion(true)的简写形式。

    **2.3 **session接口提供的常用方法

String getId();//返回sessionId setAttribute(String name,Object obj);//设置属性(绑定数据) Object getAttribute(String name);//获取属性。如果不存在,则返回null. removeAttribute(String name);//解除数据绑定

    **2.4 **session超时

       服务器会将超过指定空闲时间(在指定的时间内,该session对象没有使用)的session对象销毁掉

       a.服务器一般会有一个默认的超时机制,大部分服务器都是30分钟。可以修改服务器的缺省超时时间。对于tomcat,可以修改安装目录下的/conf/web.xml中的:

<session-config>    <session-timeout>30</session-timeout> </session-config>

   另外,也可以只修改某个应用的web.xml,这种修改只对当前应用有效。

   b.也可以用代码的方式来实现:

session.setMaxInactiveInterval(int sec);//设置最大不活动间隔时间

    2.5 删除session----使session无效

session.invalidate();//设置session无效

    2.6 session案例:session验证

       a.在登录成功以后,在session对象上绑定相关的数据,比如:

 session.setAttribute(“user”,user);

       b.对于需要保护的资源(需要登录成功之后,才能访问的地址),添加session验证代码:

Object obj=session.getAttribute(“user”); if(obj==null){    //用户没有登录成功。跳转到登录页面 }else{    //打开指定的页面 }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )