我有一个iphone(基于jqtouch)的网络应用程序,它使用cookie进行身份验证.使用流程如下:
用户进入移动登录页面并被指示将页面保存为其主页上的书签.
他们启动书签,转到登录页面登录并获取cookie.
cookie工作,他们可以在整个网站上导航.
但是,此会话cookie不是持久的.如果他们离开safari然后使用保存的bookmarklet重新启动,则在上一个会话期间设置的cookie将消失.
只是使用safari(即:直接启动safari而不是通过书签)导航页面工作正常(即:启动safari,转到url,登录,重新启动safari,返回url).
我发现创建bookmarklet时激活的cookie是持久的,但是当通过bookmarklet访问safari时在会话期间设置的任何cookie都不是持久的.
我想知道这是否是一个safari/iphone问题和/或是否有任何解决方法.非常感谢您提供的任何见解.
我从ios登录我的龙卷风后端并发回一个secure_cookie,我注意到只要我验证了我设置的secure_cookie,我也可以请求其他信息.NSURLConnection持续cookie多久或者关闭应用后cookie会被删除?
这在Apple文档中提到:
URL加载系统自动发送适用于NSURLRequest的任何存储的cookie.除非请求指定不发送cookie.
我的Web应用程序是这样的,当用户登录服务器时,会在响应中添加Set-Cookie标头,如下所示:
Set-Cookie:JSESSIONID=1; Path=/myApp/; Secure
在注销时,我尝试在客户端(浏览器)上删除此cookie,因为我不关心是否在服务器上成功销毁会话,只要cookie被删除即可.任何挥之不去的"鬼"会话将不时在服务器上清理.
但是,我的应用程序无法删除JSESSIONID cookie.假设从中调用https://test.myserver.com/myApp/app/index.html#/mySubPage注销函数,注销函数执行:
delete $cookies["JSESSIONID"];
$location.path("/login");
Run Code Online (Sandbox Code Playgroud)
cookie不会被删除.刷新Chrome开发者工具的"资源"标签中的Cookie列表显示它仍然存在.重新加载登录页面并刷新"资源"选项卡中的cookie列表仍显示cookie.
为什么我不能从我的Javascript客户端删除不是HTTPOnly cookie的cookie?是导致问题的路径吗?不应该,因为脚本在cookie的路径中包含的页面上运行.Cookie通常不是那么难以处理,所以我很清楚,我可能会忽略一些微不足道的东西 - 但是任何帮助都会非常感激.
更新:
我在原帖中给了我的应用程序错误的路径.现在编辑它以反映正确的路径(好吧,抽象地).事实证明,这是该问题的关键信息.AngularJS使用应用程序的完整相对路径作为它创建/删除的所有cookie的路径属性,因此我们的服务器使用路径设置cookie /myApp/并且应用程序在相对路径上运行/myApp/app,因此Angular试图删除前者cookie,不存在(为了覆盖或删除现有cookie,名称,域和路径都需要与创建cookie时使用的相同).
如何在Play 2.1中配置SESSION cookie的namne?
默认情况下,Play似乎会创建一个名为"PLAY_SESSION"的cookie.我该如何自定义名称?
谢谢
要解释我的问题,我必须添加一些上下文信息:
我们有一个网站,它与会话一起工作,已经工作了7年没有任何问题,除了我们的服务器管理员,他无法登录,我们从来不知道为什么......直到现在......
我们的服务器管理员正在度假,所以我不得不做他的一些工作,它包括登录ISP Config,它位于同一服务器和域使用不同的端口(8080),我在那里登录,检查一些值,然后当我回到我们的网站时,我无法登录,就像我们的服务器管理员一样.
做一些调试我发现在每次刷新session_id()更改时会话都有问题.
使用ini_get我得到session.cookie_domain并且session.cookie_secure是空的.
如果我做了一个print_r($_COOKIE)没有PHPSESSID,如果我把它设置为任何值,它消失,即使我写了一个很长的到期它没有保存,如果我设置2个像这样的cookie:
setcookie("PHPSESSID", "MYSESSION", time()+365*24*60*60, '/');
setcookie("a", "b", time()+365*24*60*60, '/');
Run Code Online (Sandbox Code Playgroud)
然后print_r($_COOKIE);我明白了:
Array ( [a] => b )
Run Code Online (Sandbox Code Playgroud)
我没有任何.htaccess,所以我身边没有规则,似乎ISP配置中的某些内容改变了我存储cookie的方式.
我可以在webmasters.stackexchange.com上询问,但是当有人登录ISP配置后登录我的网站时,我需要一个PHP答案来设置新值.
这是我目前要测试的代码:
<?php
session_set_cookie_params(3600,"/");
session_start();
//$_SESSION[b_id]=1;
setcookie("PHPSESSID", "GTS", time()+365*24*60*60, '/');
setcookie("a", "b", time()+365*24*60*60, '/');
echo "<div>b_id: $_SESSION[b_id]</div>";
echo "<div>session_id: ".session_id()."</div>";
echo "<div>cookie_domain: ".ini_get('session.cookie_domain')."</div>";
echo "<div>save_path: ".ini_get('session.save_path')."</div>";
echo "<div>cookie_secure: ".ini_get('session.cookie_secure')."</div>";
print_r($_COOKIE);
/*echo "<pre>";
print_r(ini_get_all());
echo "</pre>";*/
?>
Run Code Online (Sandbox Code Playgroud)
这是输出,(session_id值每次都改变):
b_id:
session_id: du95eljbkct54qktvcd18a7ej0
cookie_domain:
save_path: /var/lib/php/sessions …Run Code Online (Sandbox Code Playgroud) 即使我在发出正常请求时提供了所有数据、cookie 和参数,Cloudflare 如何知道该请求来自脚本?它检查什么?难道我做错了什么?例如(我已经编辑了一些值):
import requests
cookies = {
'__Host-next-auth.csrf-token': '...',
'cf_clearance': '...',
'oai-asdf-ugss': '...',
'oai-asdf-gsspc': '...',
'intercom-id-dgkjq2bp': '...',
'intercom-session-dgkjq2bp': '',
'intercom-device-id-dgkjq2bp': '...',
'_cfuvid': '...',
'__Secure-next-auth.callback-url': '...',
'cf_clearance': '...',
'__cf_bm': '...',
'__Secure-next-auth.session-token': '...',
}
headers = {
'authority': 'chat.openai.com',
'accept': 'text/event-stream',
'accept-language': 'en-IN,en-US;q=0.9,en;q=0.8',
'authorization': 'Bearer ...',
'content-type': 'application/json',
'cookie': '__Host-next-auth.csrf-token=...',
'origin': 'https://chat.openai.com',
'referer': 'https://chat.openai.com/chat',
'sec-ch-ua': '"Brave";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'sec-gpc': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', …Run Code Online (Sandbox Code Playgroud) 我在Node中有一个典型的Web应用程序,它使用Express框架和会话中间件.我也在为我的应用程序的某些动态部分使用Socket.io(目前,这是一个聊天机制,但这是切向的).我已经能够自己成功设置会话和socket.io,但是想要将它们组合起来(EG:将套接字聊天消息与用户帐户相关联而不会访问数据库).
应该注意(我可以看到这是一个可能的问题点),我在不同的端口上运行两个快速服务器:一个用于常规HTTP流量,一个用于HTTPS流量.但是,我让两台服务器都经过了一个完美配置并共享同一个会话存储.http和https页面之间的会话确实存在.最初通过HTTPS提供的页面设置会话,socket.io页面是vanilla HTTP.
我正在按照这里的指南来实现我正在寻找的有关集成socket.io和会话的内容.但是,在授权功能中,尽管我的应用程序的基于会话的部分按预期工作,但从未设置data.headers.cookie.更奇怪的是,在设置会话后,如果我console.log(document.cookie)在浏览器中执行操作,我会得到一个空字符串,但是当我使用Firefox开发人员工具栏查看我的cookie时,有一个用于express和connect的SID cookie.
以下是服务器代码的相关部分:
var config = {
ip : "127.0.0.1",
httpPort : 2031,
httpsPort : 2032
};
var utils = require("./utils"),
express = require('express'),
fs = require('fs'),
parseCookie = require('./node_modules/express/node_modules/connect').utils.parseCookie,
routes = require('./routes')(config);
var httpsOpts = {
key : fs.readFileSync("cert/server-key.pem").toString(),
cert: fs.readFileSync("cert/server-cert.pem").toString()
};
var app = express.createServer(),
https = express.createServer(httpsOpts),
io = require("socket.io").listen(app, { log: false}),
helpers = require("./helpers.js"),
session = new express.session.MemoryStore(),
sessionConfig = express.session({
store : session,
secret : 'secret',
key …Run Code Online (Sandbox Code Playgroud) Internet Explorer 9不会使用我的AJAX请求发送会话cookie.
当我通过AJAX向我的API发出身份验证请求时,它会返回一个设置会话cookie的响应.通过AJAX对API的后续调用不会将cookie发送回服务器.
API位于同一主机上.同样,常规的非AJAX页面请求也不会显示会话cookie.我关闭了Internet选项中的所有隐私和安全设置.Chrome会正确发送Cookie.
如何让IE返回cookie?谢谢!
我正在使用.net MVC 4构建一个Web应用程序.
我有ajax表单来编辑数据.

如果用户空闲15分钟,它将使用户的会话到期.当用户单击编辑按钮时会发生这种情况,它会在部分内容中加载登录页面,因此现在会话到期.

编辑链接 - cshtml代码
@Ajax.ActionLink("Edit", MVC.Admin.Material.ActionNames.TagEditorPanel, MVC.Admin.Material.Name, new { isView = "false", id = Model.ID.ToString() }, new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "materialTagBox", InsertionMode = InsertionMode.Replace }, new { @class = "editlinks" })
Run Code Online (Sandbox Code Playgroud)
控制器/行动守则
[Authorize]
public virtual ActionResult TagEditorPanel(bool isView, int id)
{
//do something
return PartialView(MVC.Admin.Material.Views._tag, response);
}
Run Code Online (Sandbox Code Playgroud)
Web.config文件
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
我明白为什么会这样.我不知道如何解决它.我想阻止它,我想直接将用户重定向到登录页面.我怎样才能做到这一点?
提前致谢..!!!
ajax asp.net-mvc session-cookies asp.net-mvc-partialview c#-4.0
所以标题基本上都说明了,我使用的是Laravel 5.4,PHP 7.1,并且我的本地机器会话工作得很好.基本上每次我尝试登录或重新加载页面时,我都会获得一个新的CSRF令牌,从而破坏了所有内容.我使用数据库作为我的会话驱动程序,并且每创建一个请求就会在数据库中创建一个新条目.当我第一次升级时,这发生在我的本地机器上但修复它的解决方案是更新我的cookie_domain env变量,我得到它的工作.然而,在我的新服务器上,我已经尝试了我能想到的每个域,但它仍然不起作用.
这是我所知道的,
会话Cookie未保存在Chrome - >应用程序 - > Cookie下,这确实出现在我的本地设置中.
CSRF-TOKEN在每个页面重新加载时获取一个新值,但XSRF-TOKEN cookie存在并在每次重新加载时保持其值.
本地和我的新服务器都运行完全相同的git分支,并且都运行apache 2.4,Laravel 5.4和PHP 7.1,所以这让我觉得它是某种配置问题.本地和服务器都运行centos 7
每个请求都在DB中创建一个新会话,这发生在get,post和ajax请求中.
我认为这是来自某个地方的配置问题,但我不知道,任何帮助将不胜感激.如果它有帮助,查看我的响应Header我的初始页面加载sid和laravel会话都出现在'Set-Cookie'命令下,但实际上都没有保存到本地应用程序cookie存储.
编辑/更新 所以最初我回答了我自己的问题,说出我认为是修复的问题,但是这个修复程序已经不再有效了,而且我在整个地方都遇到了这个问题.因此,更新我的问题与以前一样,尝试做任何事情都会创建一个新会话,重新加载和导航几个页面会因为ajax请求和其他此类活动而增加数十个会话.
我的设置现在就是这个,我有3台服务器,这三台服务器都运行了一个克隆的图像,这意味着它们是相同的,但其中一个是子域,development.mysite.com,另外两个是主站点mysite的负载均衡.COM.因此,我能提出的唯一可能的解释是,由于我的子域名,laravel无法理解我的设置.我已经在.env文件(development.mysite.com,.mysite.com,mysite.com,.development.mysite.com等)中尝试了COOKIE_DOMAIN的所有可能组合,并且我已经向我的主机添加了几十个选项无济于事.关于这可能是什么的任何想法?
**编辑/更新#2**除此之外,我发现它可能与我的域名使用是一个子域名,其中主域名也运行laravel,如果是这样,我将不得不弄清楚如何和为什么.
session-cookies ×10
cookies ×3
ajax ×2
javascript ×2
angularjs ×1
asp.net-mvc ×1
c#-4.0 ×1
cloudflare ×1
express ×1
ios ×1
iphone ×1
ispconfig ×1
java ×1
laravel ×1
laravel-5 ×1
node.js ×1
persistence ×1
php ×1
python ×1
scala ×1
session ×1
socket.io ×1