我一定错过了一些关于cookie的基本知识.在本地主机上,当我设置在服务器端的cookie,并明确指定域为localhost(或.localhost).某些浏览器似乎没有接受cookie.
Firefox 3.5:我在Firebug中检查了HTTP请求.我看到的是:
Set-Cookie:
name=value;
domain=localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
Run Code Online (Sandbox Code Playgroud)
或者(当我将域设置为.localhost时):
Set-Cookie:
name=value;
domain=.localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,都不会存储cookie.
IE8:我没有使用任何额外的工具,但cookie似乎也没有存储,因为它不会在后续请求中发回.
Opera 9.64: localhost和.localhost都工作,但是当我检查Preferences中的cookie列表时,域名设置为localhost.local,即使它列在localhost下(在列表分组中).
Safari 4: localhost和.localhost都可以工作,但它们在Preferences中始终列为.localhost.另一方面,没有显式域的cookie,它显示为localhost(无点).
localhost有什么问题?由于存在这么多的不一致,必须有一些涉及localhost的特殊规则.另外,我不完全清楚为什么域名必须以点为前缀?RFC 2109明确声明:
Domain属性的值不包含嵌入点或不以点开头.
为什么?该文件表明它必须对安全做些什么.我不得不承认我没有阅读整个规范(稍后可能会这样做),但听起来有点奇怪.基于此,在localhost上设置cookie是不可能的.
我正在开发一个基于客户端的AngularJS和服务器端的Java for my API(Tomcat + Jersey for WS)的应用程序.
我的API的某些路径受到限制,如果用户没有会话,则返回的响应状态为401.在客户端,拦截401 http状态以将用户重定向到登录页面.
用户通过身份验证后,我会在服务器端创建会话
httpRequest.getSession(true);并且发送给客户端的响应确实在其标头中有Set-cookie指令:
Set-Cookie:JSESSIONID=XXXXXXXXXXXXXXXXXXXXX; Domain=localhost; Path=/api/; HttpOnly
问题是cookie永远不会放在客户端.当我检查localhost域的cookie时它是空的,因此下一个请求的头部没有这个cookie,客户端仍然无法访问我的API的受限路径.
客户端和服务器位于同一个域中,但它们没有相同的路径和相同的端口号:
客户: http://localhost:8000/app/index.html
服务器: http://localhost:8080/api/restricted/
附加信息:双方都启用了CORS:
"Access-Control-Allow-Methods", "GET, POST, OPTIONS" "Access-Control-Allow-Origin", "*" "Access-Control-Allow-Credentials", true
任何使Set-cookie正常工作的想法?这是与AngularJS相关的问题吗?
我查看了很多关于cookie的问题,但我没有找到关于我的问题的答案.我有以下场景:
用户在example.com上创建登录,并且应该获得cookie,但仅限于子域fuu.example.com.我生成以下HTTP标头部分:
Set-Cookie: name=TestUser; Domain=fuu.example.com; Path=/; secure; HttpOnly
Run Code Online (Sandbox Code Playgroud)
但是当我向https://fuu.example.com发出请求时,cookie将不会添加到请求中.我想知道example.com是否有可能设置cookie fuu.example.com
.我知道example.com也可能.example.com
为example.com的所有子域设置一个cookie,但这不是我想要的.
如何为子域设置cookie?我没有在子域的请求中看到cookie.
表格提交后,我正在从网站上抓取一些内容.问题是脚本时不时地失败,比如说5个脚本失败了2次.我正在使用php curl,COOKIEFILE和COOKIEJAR来处理cookie.但是,当我观察我的浏览器发送的标题(从我的浏览器访问目标网站并使用实时http标头)和php发送的标题时,看到有很多不同之处.
我的浏览器发送了比php curl更多的cookie变量.我认为这种差异可能是因为javascript可用于设置大多数cookie,但我不确定这一点.
我正在使用下面的代码进行抓取,我正在显示我的浏览器和php curl的已发送标题:
$ckfile = tempnam ("/tmp", 'cookiename');
$url = 'https://www.domain.com/firststep';
$poststring = 'variable1=4&variable2=5';
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $poststring);
$output = curl_exec ($ch);
curl_close($ch);
$url = 'https://www.domain.com/nextstep';
$poststring = 'variableB1=4&variableB2=5';
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, …
Run Code Online (Sandbox Code Playgroud) 我们的应用程序使用 cookie 来记住用户登录。我们进行的每个身份验证 API 调用,浏览器都会在 API 请求中附加服务器设置的 HTTPonly cookie 并进行身份验证。在 Mojave 发布后,这种行为似乎在 safari 中被打破了。
我阅读了 safari 和我们的服务器团队SameSite=None;Secure
在设置 cookie 时添加的跨站点 cookie 安全性。即使在那之后,它仍然不起作用。
Set-Cookie: my_cookie=XXXXX; path=/; secure; HttpOnly; SameSite=None
请建议或提供来自实际找到解决方案的人的链接。
我正在阅读一些关于如何设置cookie的PHP教程.我注意到在FF4和IE9上成功设置了cookie,但它没有在Chrome中设置(11.0.696.60).PHP文件是从XAMPP(localhost)提供的.
我试过w3schools的例子:
<?php
setcookie("user", "Alex Porter", time()+3600);
?>
Run Code Online (Sandbox Code Playgroud)
并从此站点(对于localhost环境):
<?php
setcookie("username", "George", false, "/", false);
?>
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我正在使用多语言网站,所以我尝试了这种方法:
echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
setcookie("lg", "ro");
echo $_COOKIE["lg"];
Run Code Online (Sandbox Code Playgroud)
我们的想法是,如果客户端没有lg
cookie(因此,这是他们第一次访问此站点),那么lg = ro
为该用户设置一个cookie .
一切正常,但如果我第一次进入这个页面,第一次和第二次echo
都没有返回.只有当我刷新页面时才设置cookie,然后echo
打印出我期待的"ro"字符串.
如何设置此cookie以便echo
在第一次访问/页面加载时从第二个看到它的值?应该无需刷新页面或创建重定向.
我应该如何为这些功能添加域支持?我希望实现.example.com被声明为域,以便可以在example.com的所有子域中读取cookie.在目前的形式中,由于未设置域,因此只能从www.example.com读取
我有一个NSURLSession调用dataTaskWithRequest以便以这种方式发送POST请求
func makeRequest(parameters: String, url:String){
var postData:NSData = parameters.dataUsingEncoding(NSASCIIStringEncoding)!
var postLength:NSString = String(postData.length )
var request = NSMutableURLRequest(URL: NSURL(string: url)!)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
var error:NSError?
//request.HTTPBody = NSJSONSerialization.dataWithJSONObject(postData, options: nil, error: &error)
request.HTTPBody = postData
request.setValue(postLength, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
var task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
println("Response:\(response)")
// Other stuff goes here
})
Run Code Online (Sandbox Code Playgroud)
响应等于:
<NSHTTPURLResponse: 0x7fcd205d0a00> { URL: http://XXX.XXX.XXX:0000/*** } { status code: 200, headers { …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ASP.NET网站创建一个HttpWebRequest/HttpWebResponse会话,以便稍后通过url params解析HTML表单(这部分我知道该怎么做),但我不明白如何解析和设置cookie如会话ID.在Fiddler中,它显示ASP.NET会话ID是通过Set-Cookie在对url的/ path请求的响应中返回的,但是如何提取此会话ID并将其设置为下一个HttpWebRequest的cookie ?我知道这个Set-Cookie标头可以在HttpWebResponse.Headers.Keys中找到,但有解析它的直接路径吗?谢谢!