某些应用程序(不是我编写的,而不是PHP编写的)为域"www.domain.com"创建了一个cookie.
我想替换那个cookie.所以在php我做了:
setcookie('mycookie','mydata',time() + 2*7*24*60*60,'/','www.domain.com', false);
Run Code Online (Sandbox Code Playgroud)
但是,为域创建了生成的cookie:".www.domain.com",请注意点"." 领先于领域.
所以它不会取代它,它会创建另一个cookie.我能做什么?
我有一个函数来创建一个cookie,传递cookie的名称,值和到期时间(以天为单位).
这是功能:
function setCookie(c_name,value,exdays) {
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : ";
expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name) {
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++) {
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name) {
return unescape(y);
}
}
}
Run Code Online (Sandbox Code Playgroud)
该函数按预期工作,但我需要做什么来设置cookie永不过期?
因此,根据我对PHP和cookie的理解,如果我使用该setcookie()函数,那么我会得到一个自动进行url编码的cookie.当我去$_COOKIE数组时,我应该恢复cookie,自动解码url.问题是,当我查看时,似乎是两次解码cookie $_COOKIE.
假设我有一个cookie,其值为"Name | ID | Email",例如:
Joe|123|my+email@somewhere.com
这将被编码为:
乔%7C123%7Cmy%2Bemail%40somewhere.com
注意加号是编码的,所以理论上我应该把它解回来,如果我解码它.由于这是自动完成的$_COOKIE,我应该回到我的开始.但相反,我回来了:
Joe | 123 | my email@somewhere.com
注意曾经是加号的空间.如果我urldecode()在cookie上额外运行,这就是我所期望的.但我不是,所以我不知道为什么我会得到一个空间而不是一个加号.
另一个有趣的转折 页面上的刷新似乎产生了正确的输出.任何想法为什么它的行为像这样?
仅供参考,要设置初始cookie,我使用javascript和escape()脚本来生成编码字符串.这可能是javascript和PHP之间的问题吗?
我们将不胜感激.
尝试使用Volley lib作为我的Android应用程序的网络包装器.我有一个连接并运行,但问题是每次响应中有多个"Set-Cookie"标头时,Volley使用不能有重复键的Map,并且只会存储最后一个Set-cookie标头并覆盖其余的.
这个问题有解决方法吗?
还有另一个lib可以使用吗?
我正在学习的最重要的概念之一饼干在PHP中的细节.
在研究Cookies的过程中,我发现" cookie的价值在发送cookie时自动进行URL编码,并在收到时自动解码(以防止URL编码,改为使用setrawcookie()). "
上述陈述在我的脑海中引起了如此多的疑虑,如下:
setrawcookie()结束有setcookie()什么好处/缺点?setcookie()还是setrawcookie()?$_COOKIE['cookie_variable'] = 'some_value'而不是使用setcookie()或setrawcookie()?如果有人能够通过完美,合适且易于理解的代码示例以及逐步清晰,清晰,易于理解的解释清除我上面提到的所有疑问,那将对我有很大的帮助.
谢谢.
我想要为用户进行自动登录选项检查.基本上这意味着cookie将存储在客户端.
现在的问题是,如何使其安全,以便cookie不会被欺骗/修改.
我的一个朋友建议使用一个db表来存储session_id,用户的ip,浏览器信息等,然后在用户再次访问网站时将其与所有信息进行比较.
我觉得有一张单独的桌子有点太麻烦了.还有另一种方法吗?也许有令牌或类似的东西?
我有3个主题相同的域名.如果有人选择不同的主题,我希望它在所有3个域中传播,以便他们的体验保持不变.
我计划通过在domain1上设置cookie,重定向到设置了cookie的domain2,重定向到设置了cookie的domain3,重定向回来来实现此目的.由于信息不需要是安全的或受到保护的,因此无需任何实际问题即可正常工作.
我讨厌3重定向只是为了在每个域上设置一个cookie,并且正在寻找更优雅的东西.
我想我误解了用xmlhttprequest管理cookies.我有一个响应的服务器XMLHttpRequest在JavaScript做,我的服务器返回Allow-Control-Access-Origin,Access-Control-Allow-Headers,Access-Control-Expose-Headers并Access-Control-Allow-Credentials用正确的值标题.
我正在使用javascript在服务器上进行摘要身份验证,没有问题,我收到WWW-Authenticate来自服务器的标题,我处理并向服务器发送带有所有摘要响应的授权标头,一切正常.问题是,当摘要挑战成功时,我的服务器返回一个Set-Cookie标头,我必须得到它并添加到我的所有xhr请求的其余部分.浏览器(使用Chromium和Chrome)不允许我访问标题:
xhr.getResponseHeader("Set-Cookie");
Run Code Online (Sandbox Code Playgroud)
好吧,在XMLHTTPREQUEST Level 2中它说:"返回响应中的所有头文件,除了那些字段名称为Set-Cookie或Set-Cookie2的头文件"好的,所以我不能接受它,但有什么办法?使用Chrome Api进行Cookie(目前我还没有注意到它的注意事项),但我希望以标准的方式做到可行.随着:
xhr.withCredentials = true;
Run Code Online (Sandbox Code Playgroud)
意味着浏览器自动获取set-cookie并发送cookie头?
在关闭浏览器之前,最好的方法是让用户登录PHP驱动的站点?
第一种也是最受欢迎的方式是配合使用$_SESSION.第二个是传递零作为setcookie函数的第三个参数:setcookie(name, value, 0, domain);
setcookie ×10
cookies ×9
php ×6
javascript ×2
adt ×1
android ×1
cors ×1
http-headers ×1
httpcookie ×1
jquery ×1
login-script ×1
session ×1
urldecode ×1
urlencode ×1