JavaWEB session&Cookie

会话概述:一次会话中包含多次请求和响应

        一次会话:浏览器第一次给服务器资源发送请求,会话建立,知道有一方断开为止。

        版本1:当前浏览器与服务器间多次的请求、响应关系,被称作一个会话

        版本2:打开浏览器,进行网页的浏览,到关闭浏览器的过程,这个过程称为一次会话

功能:在一次会话的范围内的多次请求间,共享数据

方式:
(1)客户端会话技术:Cookie

(2)服务端会话技术:session

1.Cookie
        1.1.概述

                客户端会话技术,将数据保存到客户端

                cookie是Web服务器保存在客户端的一系列文本信息

        1.2 快速入门

                使用步骤:

                ①创建cookie对象

                        Cookie newCookie = new Cookie(String key,String value);

                ②写入cookie

                        response.addCookie(newCookie);

                ③读取cookie

                        Cookie[] cookies = request.getCookies();

        1.3.Cookie的细节

                1.3.1 一次可不可以发送多个cookie?

                ** 可以

                ** 可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。

                1.3.2 cookie在浏览器中保存多长时间?

                        (1)默认情况下,当浏览器关闭后,Cookie数据被销毁

                        (2)持久化存储

                            ** setMaxAge(int seconds);秒

                             ** 参数:

                            正数:将Cookie数据写到硬盘的文件中。持久化存储【cookie的存活时间】

                            负数:默认值

                            零:删除cookie信息

                1.3.3 cookie能不能存储中文?

                        在tomcat8.0之前 cookie中不能直接存储中文数据。

                        需要将中文数据转码---》一般采用URL编码

                        在tomcat8.0之后 ,cookie支持中文数据,特殊字符还是不支持,建议使用URL编码存储

                        使用URL解码解析

                        //创建Cookie时

                          Cookie cookie = new Cookie(name, URLEncoder.encode(value, "UTF-8"));

                       //读取Cookie时   

                          String value = URLDecoder.decode(cookie.getValue(), "UTF-8");

        1.4 Cookie的特点和作用

        特点:

        (1)cookie存储在数据在客户端浏览器

        (2)浏览器对于单个cookie的大小有限制(4KB)以及对同一个域名下的总cookie数量也有限制(20个)

        作用:

        (1)cookie一般用于存储少量的不太敏感的数据

        (2)在不登录的情况下,完成服务器对客户端的身份识别

        1.5 常用方法:

                void setMaxAge(int expiry):设置cookie的有效期,以秒为单位

                void setValue(String value):在cookie创建后,对cookie进行赋值

                String getName():获取cookie的名称

                String getValue():获取cookie的值

2.session-》内置对象
        2.1 概述

        (1)session表示客户端与服务器的一次会话

        (2)Web中的session指:用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览网站所花费的时间。

        (3)从上述定义中可以看到,session实际是一个【特定的时间概念】

        (4)服务器的内存中,保存着同用户的session。

        2.2 快速入门

          (1)getAttribute(String name);

          (2)setAttribute(String name,Object value)

          (3)removeAattribute(String name)

        2.3细节

                2.3.1 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?

                        * 默认情况下,不是

                        * 如果需要相同,则可以创建cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。

                        Cookie c = new Cookie("JSESSIONID",session.getId());

                        c.setMaxAge(60*60);

                        response.addCookie(c);

                2.3.2 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?

                        * 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作。

                        ** session的钝化:

                                在服务器正常关闭之前,将session对象序列化到硬盘上

                        ** session的活化:

                                在服务器启动后,将session文件转化为内存中的session对象即可。

        2.3.3 session什么时候被销毁?

                (1) 服务器关闭

                (2) session对象调用invalidate()方法

                (3)session默认失效时间 30分钟=》web.xml

        2.4 session的特点

                session用于存储一次会话的多次请求的数据,存在服务器端

                session可以存储任意类型,任意大小的数据

        2.5 内置对象session的常用方法

                (1)void setAttribute(String key,Object value):以key/value的形式保存对象值

                (2)Object getAttribute(String key):通过key获取对象值

                (3)void invalidate():设置session对象失效

                (4)String getId():获取sessionid

                (5)void setMaxInactiveInterval(int interval):设定session的非活动时间

                (6)int getMaxInactiveInterval():获取session的有效非活动时间(以秒为单位)

                (7)void removeAttribute(String key):从session中删除指定名称(key)所对应的对象

        2.6 session与窗口的关系

                (1)每个session对象都与浏览器一一对应,重新开启一个浏览器,相当于重新创建一个session对象。

                (2)通过超链接打开的新窗口,新窗口的session与其父窗口的session相同

3.session与Cookie的区别
        不重要的信息使用cookie保存,重要的信息使用session保存

        session没有数据大小限制,Cookie有

        session数据安全,Cookie相对于不安全

        session是在服务器端保存用户信息,Cookie是在客户端保存用户信息

        session中保存的是对象,Cookie保存的是字符串

        session随会话结束而关闭,Cookie可以长期保存在客户端
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb 中,可以使用 Cookie 来跟踪用户的 Session 信息。 首先,在服务器端创建一个 Session 对象,可以使用以下代码: ```java HttpSession session = request.getSession(true); ``` 这个方法会检查请求中是否包含了一个 Session ID,如果没有,就会创建一个新的 Session 对象,并返回一个包含 Session ID 的 Cookie。如果已经存在 Session ID,就会返回对应的 Session 对象。 接下来,我们可以将需要保存的数据存储在 Session 对象中: ```java session.setAttribute("username", "John"); ``` 这里将一个名为 username 的属性设置为 John。 最后,将 Session ID 返回给客户端,可以使用以下代码: ```java Cookie cookie = new Cookie("sessionId", session.getId()); response.addCookie(cookie); ``` 这里创建一个名为 sessionId 的 Cookie,并将 Session ID 设置为其值,最后将 Cookie 添加到响应中。 当客户端发送请求时,服务器会读取 Cookie 中的 Session ID,然后从服务器的 Session获取对应的数据。可以使用以下代码来读取 Session 中的数据: ```java HttpSession session = request.getSession(false); String username = (String) session.getAttribute("username"); ``` 这里将获取名为 username 的属性的值,如果 Session 不存在,就返回 null。 注意,将敏感数据保存在 Cookie 中是不安全的,因为 Cookie 可以被窃取或篡改。因此,建议对敏感数据进行加密或使用其他更安全的方式进行保存。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值