Cookie入门及应用实例

news/2024/5/18 12:01:41 标签: java, js, jQuery, Cookie

        最近在工作中,牛逼的前端为追求更好的体验,如对于无需与后台请求交互(纯前端的页面跳转、页面内容的展示),但Session已过期,用户操作后提交,后台再提示已过期,给用户的体验不好,于是想到了Cookie,具体如下:

1.后台过依然在过滤器中以Session来进行是否过期的判断

2.在过滤器中增加设置Cookie的逻辑,过期时间同Session,即从Sesion中获取用户信息,如果不为空,说明没过期,然后设置Cookie(name为用户ID)

3.前端从Cookie中获取用户ID,如能获取到,说明未过期,即无需做跳转,否则跳转到登录页面

JAVA:

java">String userId = (String) request.getSession().getAttribute(Constants.SESSION_KEY_USER_ID);
if (userId != null) {
        //cookie 同属性(name、value、path)对象,重复添加会覆盖
        Cookie cookie = new Cookie(Constants.COOKIE_KEY_USER_ID, userId);
        cookie.setMaxAge(Constants.SESSION_TIME_OUT);
        cookie.setPath(request.getContextPath() + "/");
        response.addCookie(cookie);
}

 

前端:

js">var userId = $.cookie('userId');
if(!userId){
        window.location.href='login.html?'+new Date().getTime();
}

附:

一.Cookies入门

        Cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段。IE浏览器把Cookie信息保存在类似于C://windows//cookies的目录下。

        当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。

        cookies给网站和用户带来的好处非常多: 

        1.Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径 

        2.Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告 

        3.Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点 

        4.Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务 

 

二.cookie过期时间设置方式

java">cookie.setMaxAge(0);//不记录cookie
cookie.setMaxAge(-1);//会话级cookie,关闭浏览器失效
cookie.setMaxAge(60*60);//过期时间为1小时

 

三.JS设置Cookie

1.jQuery方法(当然,前提是要引入jquery.cookie.js):

js">var date = new Date();
var loginCount = 0;
date.setTime(date.getTime()+10*1000);//只能这么写,10表示10秒钟
$.cookie('loginCount', ++loginCount, {expires: date});

2.js方法:

js">document.cookie='loginCount=1;expires='+new Date()+';path=/';

3.检查cookies是否可用

方法一:

        jquery的$.cookie("cookie名称");判断是否为空就可以

方法二:

        $(document).ready(function() {var dt = new date();dt.setseconds(dt.getseconds() + 60);document.cookie = "cookietest=1; expires=" + dt.togmtstring();var cookiesenabled = document.cookie.indexof("cookietest=") != -1;if(!cookiesenabled){//cookies不能用……..}});

 

四.Cookie中的path与domain属性详解

        1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为www.jb51.net。而跨域访问,如域A为t1.test.com,域B为t2.test.com,那么在域A生产一个令域A和域B都能访问的cookie就要将该cookie的domain设置为.test.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该cookie的domain设置为t2.test.com。

        2.path表示cookie所在的目录,asp.net默认为/,就是根目录。在同一个服务器上有目录如下:/test/,/test/cd/,/test/dd/,现设一个cookie1的path为/test/,cookie2的path为/test/cd/,那么test下的所有页面都可以访问到cookie1,而/test/和/test/dd/的子页面不能访问cookie2。这是因为cookie能让其path路径下的页面访问。

        3.浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。

        4.含值键值对的cookie:以前一直用的是name=value单键值对的cookie,含多个子键值对的cookie格式是name=key1=value1&key2=value2。可以理解为单键值对的值保存一个自定义的多键值字符串,其中的键值对分割符为&,当然可以自定义一个分隔符,但用asp.net获取时是以&为分割符。


http://www.niftyadmin.cn/n/1316504.html

相关文章

Grafana or Prometheus基本配置

本文主要基于prometheus作为数据源,对grafana进行相关配置 1、Display Name 默认将所有标签都显示出来,不容易分辨,可以通过Display Name进行设置,选择某一个标签 文档:Configure standard options | Grafana docum…

Eclipse安装Eclipse Memory Analyzer插件

在Help->Install New Software...中输入选择http://download.eclipse.org/mat/1.6.1/update-site/,如没有,点击旁边的"Add..."按钮新增,即可看到下内容,选择Memory Analyzer和Memory Analyzer(Charts)[optional]&…

移动终端前端开发概述

1 移动终端开发背景 1.全球移动端设备将会超过人口总数。2.移动端上网时间超过pc端上网时间。3.平板电脑、电子阅读器、智能电视和手机等设备每天下载数以百万计的应用 。总结:面对这种挑战。让头脑与目光保持一定的前瞻性是非常重要的。要想使自己的产品在占有率及…

Java Web文件下载

工作中,一同事做下载功能时,在Chrome浏览器下不能正常,最后发现是需要对下载文件名做处理,特记录,源代码如下: response.reset(); response.setContentType("application/octet-stream"); String…

C#基础之二

C#基础之二 1、 静态字段、静态成员:由该类的所有实例共享,其变化,实例是对所有可见。 2、 声明为static有:场、方法、属性、构造函数、运营商、事件。 3、 不同的常量静态量:位置,在编译时被编译器替换…

Java Web项目Chrome文件下载问题解决办法

工作中,一同事做下载功能时,在Chrome浏览器下不能正常,最后发现是需要对下载文件名做处理,特记录,源代码如下: response.reset(); response.setContentType("application/octet-stream"); String…

将报表移动端集成到自有移动端app方法【IOS、Android】

应用场景 用户有自己的app,希望把报表的移动端【本文中以FineReport移动端为例】功能集成到他们的app里面去,而不需要安装两个app。Android端和IOS端的集成接口是不一样的,下面我们分开详述如何实现。 IOS端集成App 1. 资源准备 准备好IOS端集…

配置log4j2.xml输出MyBatis的SQL日志

在工作中&#xff0c;排查问题时难免需要输出MyBatis真正执行的SQL及参数&#xff0c;需查看SQL信息&#xff0c;如下是一种配置方法&#xff1a; log4j2.xml <?xml version"1.0" encoding"UTF-8"?> <Configuration status"info">…