cookie一次生效,cookie过期时间

本文目录一览:

Cookie 是什么

Cookie 是用户浏览器保存在本地的一小块数据,它会在浏览器下次向 同一服务器 再发起请求时被携带并发送到服务器上。

Cookie 主要用于以下三个方面:

会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)

个性化设置(如用户自定义设置、主题等)

浏览器行为跟踪(如跟踪分析用户行为等)

✔ Domain

Domain 标识指定了哪些主机可以接受 Cookie。如果不指定,默认为当前文档的主机(不包含子域名)。 如果指定了 Domain,则一般包含子域名(子域名可以访问父域名的 Cookie) 。

例如,如果设置 Domain=mozilla.org,则 Cookie 也包含在子域名中(如 developer.mozilla.org)。

✔ Path

Path 标识指定了主机下的哪些路径可以接受 Cookie(该 URL 路径必须存在于请求 URL 中)。以字符 %x2F (/) 作为路径分隔符,子路径也会被匹配。

设置 Path=/docs,则以下地址都会匹配:

/docs

/docs/Web/

/docs/Web/HTTP

✔ Expires/Max-Age

Cookie 的过期时间,过了这个时间之后 Cookie 将会自动删除。

Set-Cookie:id=a3fWa; Expires=Wed,21Oct201507:28:00GMT;

Max-Age 的单位是秒。

document.cookie=’promo_shown=1; Max-Age=2600000; Secure’

✔ HttpOnly

为避免跨域脚本 (XSS) 攻击,通过 JavaScript 的 Document.cookie API 无法访问带有 HttpOnly 标记的 Cookie,它们只应该发送给服务端。如果包含服务端 Session 信息的 Cookie 不想被客户端 JavaScript 脚本调用,那么就应该为其设置 HttpOnly 标记。

Set-Cookie:id=a3fWa; Expires=Wed,21Oct201507:28:00GMT; Secure; HttpOnly

✔ Secure

标记为 Secure 的 Cookie 只应通过 被 HTTPS 协议加密 过的请求发送给服务端。

SameSite

SameSite Cookie 允许服务器要求某个 Cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。

Set-Cookie:key=value; SameSite=Strict

None 浏览器会在同站请求、跨站请求下继续发送 Cookies,不区分大小写;

Strict 浏览器将只发送相同站点请求的 Cookie(即当前网页 URL 与请求目标 URL 完全一致)。如果请求来自与当前 location 的 URL 不同的 URL,则不包括标记为 Strict 属性的 Cookie;

Lax 在新版本浏览器中,为 默认 选项,Same-site Cookies 将会为一些跨站子请求保留,如 图片加载 或者  iframe  不会发送,而点击 标签会发送;

✔ 增删改查

设置 Cookie 和修改 Cookie 相同:

functionsetCookie(cname, cvalue, exdays) {constd =newDate()  d.setTime(d.getTime() + exdays *24*60*60*1000)constexpires =’expires=’+ d.toUTCString()return(document.cookie= cname +’=’+ cvalue +’;’+ expires +’;path=/’)}

删除 Cookie:

functiondeleteCookie(cname) {constd =newDate()constexpires =’expires=’+ d.toUTCString()return(document.cookie= cname +’=’+’;’+ expires +’;path=/’)}

查询 Cookie:

functiongetCookie(cname) {constcookieObj =document.cookie.split(‘;’).reduce((prev, curr) ={constentry = curr.split(‘=’)    prev[entry[0].trim()] = entry[1]returnprev  }, {})if(cname)returncookieObj[cname]returncookieObj}

✔ 不同二级域名共享 Cookie

Cookie 可以设置成给子域名共享,类似于在 x.com.cn 设置的 Cookie 可以提供给 a.x.com.cn、b.x.com.cn、suba.a.x.com.cn 等域名访问。

比如下面的方式:

res.writeHead(200, {‘Set-Cookie’: [‘name=sub-x-com-cn; path=/;domain=x.com.cn’,’name=only-x-com-cn; path=/’],})

domain=x.com.cn 表示 domain=x.com.cn 及其子域名都可以使用, 不写 doamin 默认只有当前域名可用,设置的 Cookie 是这样的:

总结

设置 Cookie 时,在 x.com.cn 设置为 …;domain=x.com.cn 的 Cookie 可以给 x.com.cn 及其子域名使用;

设置 Cookie 时,在 x.com.cn 设置没有 domain 的 Cookie 只能给 x.com.cn 使用;

父域名无法在子域名设置 Cookie ,例如在 x.com.cn 设置了 name=lxfriday;domain=subx.x.com.cn,这种设置是无效的;

✔ Cookie 常见问题

Cookie 不区分端口;

一个 Cookie 存储上限是 4K 大小;

Cookie 只能存储 ASCII 字符串;

✔ Cookie 安全-会话劫持和 XSS

newImage().src=”+document.cookie

HttpOnly 类型的 Cookie 由于阻止了 JavaScript 对其的访问性而能在一定程度上缓解此类攻击。

✔ Cookie 安全-跨站请求伪造(CSRF)

当你打开含有了这张图片的 HTML 页面时,如果你之前已经登录了你的银行帐号并且 Cookie 仍然有效(还没有其它验证步骤),你银行里的钱很可能会被自动转走。

这种情况只是一种假设,实际上应该不允许使用 GET 修改数据,对转账的操作需要添加二次确认。

✔ Session

Session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个 Session 时,服务器首先检查这个客户端的请求里是否已包含了一个 Session 标识(称为 Session ID),如果已包含则说明以前已经为此客户端创建过 Session,服务器就按照 Session ID 把这个 Session 检索出来使用(检索不到,会新建一个),如果客户端请求不包含 Session ID,则为此客户端创建一个 Session 并且生成一个与此 Session 相关联的 Session ID,Session ID 的值应该是一个 既不会重复,又不容易被找到规律以仿造的字符串 ,这个 Session ID 将被在本次响应中返回给客户端保存。

Session 从客户端传输到服务端的方式有两种:

通过 Cookie 传输;

通过 URL 传输;

表单隐藏字段,通过在 中添加一个隐藏字段,把 Session 传回服务器;

基于 Cookie 实现,会话期 Cookie 是最简单的 Cookie: 浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效 。会话期 Cookie 不需要指定过期时间(Expires)或者有效期(Max-Age)。

Set-Cookie: name=lxfriday.xyz; path=/;HttpOnly

✔ Cookie 与 Session 有什么不同

mp.weixin.qq.com/s?__biz=MzA…

保存的地方不同 ,Cookie 保存在客户端,Session 保存在服务端;

有效期不同 ,Cookie 可以存储很长时间,Session 只能存在于一次会话中,浏览器关闭之后 Session 就失效了;

安全性不同 ,Cookie 存储在客户端容易被盗取或者利用,Session 在服务端比较安全;

存储大小不同 ,单个 Cookie 能存储 4K 的数据,Session 存储量比 Cookie 高得多;

存取方式不同 ,Cookie 中只能保存  ASCII 字符串 ,假如需求存取 Unicode 字符或者二进制数据,需求先进行编码。Session 中能够存取 任何类型 的数据;

服务器压力不同 ,Session 是存储在服务端的,巨大并发的时候会使服务器资源急速飙升。Cookie 则不存在此问题;

链接:

如何使cookie全站都生效

以 setcookie(‘name’, “Garen”);echo $_COOKIE[‘name’];为例;第一次访问在执行setcookie(‘name’,”Garen”);之前,PHP已经从请求体重获取所有的cookie(在$_COOKIE中),然后到setcookie(‘name’,”Garen”);的时候,只是设置了名为name的cookie;这部只是保存进浏览器,但是并没有赋值给$_COOKIE,$_COOKIE并没有变化,所有也就没有$_COOKIE[‘name’],执行到echo$_COOKIE[‘name’];就会报错.第2次访问获取浏览器中所有的cookie时,已经有了上次添加的这个名为name的cookie了,所以可以显示

cookie刷新才能生效

永远记住,对COOKIE的赋值只有等下一次浏览请求时才能生效。如果想达到你那样的功能请用变量来实现。我给出php的示例代码:

$val_cookie=”xx”;

function fun1()

{

setcookie(“c_1”,$val_cookie,time()+3600);//设置下标名为c_1的cookie

$val_cookie;//若此时就要用刚刚赋进cookie的值,请用这个变量

}

function fun2()

{

$val_cookie;//和上边一样

}

如何设置cookie的有效期

你是用户还是开发者啊 要是用户不想使用自动登录就把浏览器的安全级别设置成最高 保证会让你很满足 一天登录n次你就会享受输n次密码的快感。

如果是开发者那就可以两种方式设置cookie有效期了:javascript设置和服务器脚本语言设置(有php或者java或者asp或者.NET)

js是这样设置的:

function zxmcook(name,value,time){ //函数名字自己随意定义,zxm是哥哥我名字,你就不要郁闷了

var exp=new Date();

exp.setTime(exp.getTime()+time*60*24*60*1000); //这里的time就是天数

document.cookie=name+”=”+escape(value)+”;expires=”+exp.toGMTString();

}

zxmcook(“mn”,”zxm”,1)//这就是一天

ok就这样了 累死我了

然后php或者java或者asp或者.NET就不说了 并且每个人只会选择一种的,哥不愿意说了半天咱两跑偏了 我搞的是php,结果你是java那样多尴尬啊,不过我怎么现在感觉怪怪的,你如果是开发者不会为了搞清楚个cookie跑这儿问半天,网上一搜就是一片,所以我预感咱两百分之90都跑偏了

javascript 写cookie立即生效问题

应该说这个是一个很奇怪的问题,看楼主的描述我也没明白什么原因

但是可以做这样的一些测试来定位问题

1. 是否是浏览器的问题

可以分别测试ie,firefox来判别是否是浏览器的问题

2. 判断你的js设置cookie是否成功

你可以多些一些js脚本,在你设置完cookie后立马读取出来,看看设置是否生效了

3. 如果上面都没有问题,再看看网络传输

在你输入“其它网址”的时候用抓包工具如(firebug,httpwatch)查看那个请求,你可以再该请求的cookie段里头找,看看该请求是不是带上了你设置的cookie

4. 如果这些都正确了

那你就确认一下你的asp程序读取cookie的方法是否正确

我想楼主能够按以上4个步骤来测试,应该是能够把问题定位下来了

祝好运!

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/259530.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 16:29
下一篇 2024-12-15 16:29

相关推荐

  • 解决docker-compose 容器时间和服务器时间不同步问题

    docker-compose是一种工具,能够让您使用YAML文件来定义和运行多个容器。然而,有时候容器的时间与服务器时间不同步,导致一些不必要的错误和麻烦。以下是解决方法的详细介绍…

    编程 2025-04-29
  • Python载入Cookie错误解决方法用法介绍

    本文将从多个方面详细阐述Python载入Cookie错误的解决方法,希望能对读者有所帮助。 一、Cookie错误常见原因 1、Cookie过期:当Cookie过期时,载入Cooki…

    编程 2025-04-29
  • Cookie是后端生成的吗?

    是的,Cookie通常是由后端生成并发送给客户端的。下面从多个方面详细阐述这个问题。 一、什么是Cookie? 我们先来简单地了解一下什么是Cookie。Cookie是一种保存在客…

    编程 2025-04-28
  • 想把你和时间藏起来

    如果你觉得时间过得太快,每天都过得太匆忙,那么你是否曾经想过想把时间藏起来,慢慢享受每一个瞬间?在这篇文章中,我们将会从多个方面,详细地阐述如何想把你和时间藏起来。 一、一些时间管…

    编程 2025-04-28
  • 计算斐波那契数列的时间复杂度解析

    斐波那契数列是一个数列,其中每个数都是前两个数的和,第一个数和第二个数都是1。斐波那契数列的前几项为:1,1,2,3,5,8,13,21,34,…。计算斐波那契数列常用…

    编程 2025-04-28
  • 时间戳秒级可以用int吗

    时间戳是指从某个固定的时间点开始计算的已经过去的时间。在计算机领域,时间戳通常使用秒级或毫秒级来表示。在实际使用中,我们经常会遇到需要将时间戳转换为整数类型的情况。那么,时间戳秒级…

    编程 2025-04-28
  • 如何在ACM竞赛中优化开发时间

    ACM竞赛旨在提高程序员的算法能力和解决问题的实力,然而在比赛中优化开发时间同样至关重要。 一、规划赛前准备 1、提前熟悉比赛规则和题目类型,了解常见算法、数据结构和快速编写代码的…

    编程 2025-04-28
  • 使用JavaScript日期函数掌握时间

    在本文中,我们将深入探讨JavaScript日期函数,并且从多个视角介绍其应用方法和重要性。 一、日期的基本表示与获取 在JavaScript中,使用Date对象来表示日期和时间,…

    编程 2025-04-28
  • Java Date时间大小比较

    本文将从多个角度详细阐述Java中Date时间大小的比较,包含了时间字符串转换、日期相减、使用Calendar比较、使用compareTo方法比较等多个方面。相信这篇文章能够对你解…

    编程 2025-04-27
  • 二分查找时间复杂度为什么是logN – 知乎

    二分查找是一种常用的查找算法。它通过将目标值与数组的中间元素进行比较,从而将查找范围缩小一半,直到找到目标值。这种方法的时间复杂度为O(logN)。下面我们将从多个方面探讨为什么二…

    编程 2025-04-27

发表回复

登录后才能评论