cookie和session

来源:互联网 发布:nginx 自定义404页面 编辑:程序博客网 时间:2024/06/08 09:28
 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。删除持久cookie,可以将cookie最大时效设为0,注意,删除cookie时,path必须一致,否则不会删除     在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

设置有效时间
setMaxAge()
设置有效路径
setPath()
设置有效域名
setDomain()

Session和Cookie的主要区别在于:
**Cookie是把用户的数据写给用户的浏览器。(客户端)
Session技术把用户的数据写到用户独占的session中(服务器端)所以cookie不是很安全例如用户的登陆信息应该放在session中**

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

session:

* session的创建,request.getSession();服务器创建session,会把session的id号,以cookie的形式返回到客户机。
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的Id22          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);     } }

session的几个重要方法:
isNew() 判断session是否为新创建的
int getId() 获取session的id
long getLastAccessedTime() 获取session的最后作用时间

long getCreationTime() 获取session的创建时间

getSession()将session的Id存储到名字为JSESSIONID的cookie中.

所以session的创建分为以下几种情况。

* 请求中如果没有jsessionid,那么就是创建session对象。*  如果请求头中有jsessionid值:            1.如果在服务器端,有一个session的id值与其一样,不创建,直接使用。            2.如果在服务器端,没有这个session的id值,那么会创建。* session销毁:                1.默认超时  30分钟                2.设置session超时时间                    setMaxInactiveInterval(int interval)                3.invalidate()手动销毁.                4.关闭服务器                5.在xml中设置
<!-- 设置Session的有效时间:以分钟为单位-->    <session-config>      <session-timeout>15</session-timeout>   </session-config>

浏览器禁用cookie后实现servlet中session数据共享:

   Url重写      response.encodeRedirectURL(java.lang.String url)     用于对sendRedirect方法后的url地址进行重写。      response.encodeURL(java.lang.String url)                用于对表单action和超链接的url地址进行重写

一个小问题:关闭浏览器之后Session是否销毁了?
我认为是没有销毁的因为Session的默认销毁时常是30分钟。关闭浏览器后session会保存在硬盘上。当再次开启浏览器之后是一个新window所有会是一个新的id。所以我们在处理的时候要考虑到是否需要在数据库建表的时候有session的id字段 或者计算他的有效时常及时销毁上一个session。

0 0