栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Cookie

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Cookie

//总体而言,session更重要一些。

新建一个项目名为:javaweb-session-cookie。
三步
1、补全java和resources文件夹
2、更改web.xml中的版本控制信息。
3、补全pom.xml中的依赖信息,暂时只用servlet-api:

    
      javax.servlet
      javax.servlet-api
      4.0.1
    

本次maven还是可以删掉很多不用的东西,pom.xml中可以删到只剩下项目信息和打包方式。

cookie英文是饼干
session英文是会话,即用户在页面内点击很多链接获得资源的会话过程。会话分有有状态对话和无状态对话

cookie:服务器给客户端一个信物,客户端再来的时候带上信物就可以了。客户端保存信息的一种机制,也是实现session的一种方式。
是一种客户端技术(响应,请求)
session:服务器登记下客户端的特征,下次客户端再来直接匹配特征。
是一种服务器技术,利用这个技术,可以保存用户的会话信息

新建一个包com.sunsplanter.servlet,包下新建一个类cookieServletDemo01,我们先尝试保存用户上一次访问的时间,最通俗的方法是用IO流实现,但我们现在用cookie实现,代码如下:

public class cookieDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器告诉你你来的时间,把这个时间封装成为一个信件,下次带来就知道来了

        //先解决中文乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        PrintWriter out = resp.getWriter();//注意此处是命名为out

        //cookie,服务器从客户端获取
        cookie[] cookies = req.getcookies();

        //取之前要判断cookie是否非空
        if (cookies != null) {
            //存在就取出
            out.write("Last time you visited was");
            for (int i = 0; i < cookies.length; i++) {
                cookie cookie = cookies[i];
                //获取cookie的名字
                if (cookie.getName().equals("lastLoginTime")) {
                    //获取cookie中的值
                    long lastLoginTime = Long.parseLong(cookie.getValue());//用包装类long解析成长整型的数字
                    Date date = new Date(lastLoginTime);//用包装类Date将数字转成时间
                    out.write("date is:" + date.toLocaleString());
                }
            }
        }
            else {
                    out.write("This is first time you visit here.");
                }
                //上面全部走完没有访问过的话就给客户端新建一个cookie对象代表当前时间,
                //上面全部走完访问过的话就给客户端更新这个cookie
                //无论如何服务器都会给客户端响应过去现在的时间作为cookie
        cookie cookie = new cookie("lastLoginTime", System.currentTimeMillis() + "");
        resp.addcookie(cookie);

            }

            @Override
            protected void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                doGet(req, resp);
            }
        }

配置servlet:

        
            cookieDemo01
            com.sunsplanter.servlet.cookieDemo01
        
        
            cookieDemo01
            /cookie
        

配置Tomcat运行后输入后缀cookie后发现显示的是

设置编码成utf-8后变成如下

然而之前并没有访问过,审查元素看看为啥 。
F12->application->cookies->localhost,里面可以看到设置的cookie
其中monitor-count是访问的次数。
观察network->cookie,可以看到响应头的setcookie。

关掉浏览器后再打开,发现cookie又被重置了,可以使用下面语句设置cookie有效期为一天,关掉重新进入cookie也不会失效。

        cookie.setMaxAge(24*60*60);

这时发现响应头多了一个到期时间
GMT格林尼治时间+8h=UTC北京时间。
一个cookie只能保存一个信息
一个Web站点可以给浏览器发送多个cookie,但只能存放二十个。
cookie大小限制4kb。
浏览器上限300个cookie。

最后一个重点,如果想往cookie里存放中文字符串,最稳妥的办法是:

        cookie cookie = new cookie("lastLoginTime", URLEncoder.encode("我是要存放的中文字符串","utf-8"));//编码
                String s = URLDecoder.decode(cookie.getValue(),"utf-8");//解码

以后开发中遇到问题也可以尝试这样解决。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/335692.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号