我有一个ASP.net应用程序,它使用cookie来存储用户选择的语言.一切正常,除非我在localhost上.用127.0.0.1替换localhost使它再次工作......为什么?
我看到了对file://的预期限制,但我实际上找不到对localhost的预期限制的任何引用.
我无法理解的是为什么ASP.net会话(ASP.NET_SessionId)和ASP.net表单身份验证Cookie(.FSAUTHSSO)是为localhost域正确设置的,但我的cookie不是......为什么?!
我已经google了很多,没有任何作用:
那有什么关系呢?:)
为什么ASP.net cookie可以设置而我的不会?有什么不同?
最后一件事就是提到这也发生在IE上,但在FF上工作正常.
谢谢!
亚历克斯
如何共享cookie跨源?更具体地说,如何将Set-Cookie标题与标题结合使用Access-Control-Allow-Origin?
这是我的情况的解释:
我正在尝试localhost:4000为托管在其上的Web应用程序中运行的API设置cookie localhost:3000.
我似乎在浏览器中收到了正确的响应标题,但不幸的是它们没有任何效果.这些是响应标头:
HTTP/1.1 200 OK Access-Control-Allow-Origin: http://localhost:3000 Vary: Origin, Accept-Encoding Set-Cookie: token=0d522ba17e130d6d19eb9c25b7ac58387b798639f81ffe75bd449afbc3cc715d6b038e426adeac3316f0511dc7fae3f7; Max-Age=86400; Domain=localhost:4000; Path=/; Expires=Tue, 19 Sep 2017 21:11:36 GMT; HttpOnly Content-Type: application/json; charset=utf-8 Content-Length: 180 ETag: W/"b4-VNrmF4xNeHGeLrGehNZTQNwAaUQ" Date: Mon, 18 Sep 2017 21:11:36 GMT Connection: keep-alive
此外,Response Cookies当我使用Chrome开发者工具的"网络"标签检查流量时,我可以看到cookie .但是,我看不到在"应用程序"选项卡下设置的cookie Storage/Cookies.我没有看到任何CORS错误,所以我假设我错过了其他的东西.
有什么建议?
我正在使用React-Redux应用程序中的请求模块/signin向服务器上的端点发出请求.对于服务器我使用快递.
快递服务器:
res.cookie('token', 'xxx-xxx-xxx', { maxAge: 86400000, httpOnly: true, domain: 'localhost:3000' })
在浏览器中请求:
request.post({ uri: '/signin', json: { userName: … 尝试使用一个非常简单的websockets应用程序来使用Django通道进行身份验证,该应用程序回送用户使用前缀发送的任何内容"You said: ".
我的流程:
web: gunicorn myproject.wsgi --log-file=- --pythonpath ./myproject
realtime: daphne myproject.asgi:channel_layer --port 9090 --bind 0.0.0.0 -v 2
reatime_worker: python manage.py runworker -v 2
Run Code Online (Sandbox Code Playgroud)
我在本地测试时运行所有进程heroku local -e .env -p 8080,但您也可以单独运行它们.
注意我打开了WSGI localhost:8080和ASGI localhost:9090.
路由和消费者:
### routing.py ###
from . import consumers
channel_routing = {
'websocket.connect': consumers.ws_connect,
'websocket.receive': consumers.ws_receive,
'websocket.disconnect': consumers.ws_disconnect,
}
Run Code Online (Sandbox Code Playgroud)
和
### consumers.py ###
import traceback
from django.http import HttpResponse
from channels.handler import AsgiHandler
from channels import Group
from channels.sessions import channel_session …Run Code Online (Sandbox Code Playgroud) 细节:
我有两个申请
一个是简单的HTML应用程序,另一个是ASP.NET MVC4 WebApi应用程序,项目在同一个解决方案中,我设置了多个启动项目,同时运行应用程序.
工作版本:
我在Web API项目中使用了Web Security.我完全实现了网络安全......
登录操作代码
// GET api/company
[System.Web.Http.AcceptVerbs("Post")]
[System.Web.Http.HttpPost]
public HttpResponseMessage Login(LoginRequest loginRequest)
{
try
{
if (WebSecurity.Login(loginRequest.EmailAddress, loginRequest.Password, true))
{
var userDetails = new string[2];
userDetails[0] = loginRequest.EmailAddress;
var currentUSerRole = Roles.GetRolesForUser(loginRequest.EmailAddress);
userDetails[1] = currentUSerRole[0].ToString();
HttpResponseMessage response =
Request.CreateResponse(HttpStatusCode.Accepted, userDetails);
return response;
}
else
{
HttpResponseMessage response
= Request.CreateResponse(HttpStatusCode.Unauthorized);
return response;
}
}
catch (Exception e)
{
HttpResponseMessage response
= Request.CreateResponse(HttpStatusCode.Unauthorized);
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
*WebSecurity.Login*当我使用登录方法调用时,我正在使用所有浏览器 …
我正在加载不同域的iFrame.父站点和iFrame站点都在我的控制之下.我正在使用iFrame.postMessage将消息发布到iFrame.我通过iFrame加载的网站有一个cookie(不是仅限http的cookie).我需要在父网站内读取此cookie.
var opIFrame=document.getElementById('opIFrame').contentWindow;
/**
* periodically invoking the Endpoint at OP for every six seconds
*/
setInterval(function(){
console.log('Sending polling Request From RP Client ... ' + clientId);
document.all.opIFrame.src = endPoint;
opIFrame.postMessage(clientId,"https://localhost:9443/oauth2/loginstatus");
var session=getCookieValue("session_state");
console.log('**session**'+session);
},6000);
function getCookieValue(cookieName) {
var name = cookieName + "=";
var cookies =document.cookie.split(';');
if (!cookies) {
return null;
}
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.indexOf(name) == 0) {
return cookie.substring(name.length, cookie.length);
}
}
return null;
Run Code Online (Sandbox Code Playgroud)
} …
我有一个托管在端口:80上的application1(C#)和托管在端口:3030上的应用程序2(nodejs).两者都在localhost上.
请求工作流程如下:
我尝试/理解的事情:
在应用程序1(它使用System.Web.HttpCookie)中,我试图将域设置为特定于端口("127.0.0.1:3030"),但似乎浏览器不接受它或忽略它.
//c# code
var testCookie1 = new HttpCookie("Test", "testValue");
testCookie1.Domain = "127.0.0.1:3030";
testCookie1.Path = "/";
testCookie1.Expires = DateTime.Now.AddDays(1);
Response.SetCookie(testCookie1);
var testCookie2 = new HttpCookie("Test2", "testValue2");
testCookie2.Domain = "127.0.0.1";
testCookie2.Path = "/";
testCookie2.Expires = DateTime.Now.AddDays(1);
Response.SetCookie(testCookie2);
Run Code Online (Sandbox Code Playgroud)服务器发回一个附有端口号的cookie,但浏览器似乎忽略了它.
这是我的ajax调用:
var request = $.ajax({
url: 'http://127.0.0.1:3030/SomeTask',
type: 'POST',
crossDomain: true,
});
Run Code Online (Sandbox Code Playgroud) 我用firebug手动创建了两个cookie:
Cookie1=value1; expires=Sat, 29 Mar 2014 06:21:54 GMT; path=/Ex05Cookie; domain=localhost; HttpOnly
Cookie2=value2; expires=Sat, 29 Mar 2014 06:21:54 GMT; path=/Ex05Cookie; domain=localhost:8080; HttpOnly
Run Code Online (Sandbox Code Playgroud)
唯一的区别是域属性,一个是localhost另一个有端口号.
这是我尝试请求时的HTTP标头http://localhost:8080/Ex05Cookie/:
GET /Ex05Cookie/ HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: Cookie1=value1
Connection: keep-alive
Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)
标头只包含域名为的Cookie1 localhost.
为什么我的firefox不发送Cookie2而不是Cookie1?
使用cookie进行用户识别的项目.
当用户到达时,它会调用该服务(在localhost中运行),并且带有响应头的服务发送cookie如下所示:
curl 'http://127.0.0.1:8000/api/v1.0/tracking' -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://local.com:8080' -H 'Access-Control-Request-Headers: content-type,x-forwarded-for' --compressed
Run Code Online (Sandbox Code Playgroud)
响应标头如下所示:
HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 60
Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, x-forwarded-for
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, PATCH, GET
Content-Length: 0
Content-Type: text/plain; charset=utf-8
Set-Cookie: id=random_id_123_123; expires=Wed, 06-Dec-2017 10:57:36 GMT; Domain=.local.com; Path=/
Run Code Online (Sandbox Code Playgroud)
然后在特定用户操作后,应用程序发送以下API请求:
curl 'http://127.0.0.1:8000/api/v1.0/tracking?event=video_added&user_id=123123123' -H 'Origin: http://local.com:8080' -H 'Accept: */*' -H 'Referer: http://local.com:8080/' -H 'Connection: keep-alive' --compressed
Run Code Online (Sandbox Code Playgroud)
上述请求的请求标头如下所示:
GET api/v1.0/tracking?event=video_added&user_id=123123123 HTTP/1.1
Host: 127.0.0.1:8000
Connection: keep-alive
Accept: */*
Origin: http://local.com:8080
User-Agent: My user agent
Referer: …Run Code Online (Sandbox Code Playgroud) 我在 localhost:3333 上使用带有 cookie 解析器中间件的 Express 框架的 NodeJS。我的前端由 localhost:3000 上的 react dev 服务器提供服务。这是我第一次尝试使用 cookie。以下是我为 cookie 设置的选项:{ expires: maxAge , httpOnly: true, sameSite: 'none', secure: true, domain: null }。我也尝试过使用和不使用 sameSite、httpOnly 和安全选项。以及域=本地主机。
这是我在尝试设置 cookie 时得到的 http 响应的标头:
Set-Cookie:
sessionid=119faa6a3fcfab0628998ff2592e04ceb06cda12; Path=/; Expires=Sun, 29 Jan 2023 15:20:16 GMT; HttpOnly; Secure; SameSite=None
Run Code Online (Sandbox Code Playgroud)
但问题是 cookie 没有出现在 Chrome 的 Application/Cookies 或 Firefox 的 Storage/Cookies 中。我也无法访问 cookie 作为不同端点上的请求 cookie。然而,它确实适用于我的 vps。vps 使用正确的域名和代理,因此所有请求似乎都来自同一个域/端口,我不知道这是否有所不同。
我还尝试将 127.0.0.1 dev.mylocalhost.com 添加到 /etc/hosts 以在 localhost 上伪造域名。只是阅读一些关于此的内容,不太确定它应该如何工作。我不拥有这个域,这只是在我本地的 /etc/hosts 文件中。我还没有尝试在本地主机上使用代理,所以 cookie 是从服务器上的端口 3333 上设置的,而客户端在端口 3000 …
我正在使用SimpleMembership开发一个ASP.NET MVC4项目,它在你登录时会生成一个ASPXAUTH cookie.它似乎工作得很好,但是今天我打开了另一个MVC4项目,只是注意到我已经登录了在.
这非常奇怪,因为新项目实际上没有在数据库中定义任何用户.更令人不安的是,当我点击新项目的"注销"时,它将我从原始网站中删除.
两个站点都在不同的端口上运行,但都在localhost上运行.当检查请求以查看它返回"IsAuthenticated == true"的原因时,我注意到ASPXAUTH cookie被发送到两个站点,并且调试器中cookie的"domain"参数为"null".这让我觉得可能cookie正在生成为"无域"cookie(我不知道这样的事情是否可能,说实话!),并查看了web.config设置以指定域名:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
不幸的是,设置"domain"参数已使cookie停止工作.我已经尝试了所有排列(使用http,没有http,有端口,没有端口等),每次我指定一个域时,浏览器都会收到带有正确指定域名的cookie(我在Chrome开发者工具中检查过它),但随后无法将其发送回后续请求的服务器.
所以,我对这里发生的事情感到很困惑.这是否是由于未在某处正确设置某些内容而导致的安全漏洞?或者,ASPXAUTH cookie将在同一域上的两个不同端口上的两个完全不同的Web应用程序上授权用户,这是完全正常的行为吗?我会在网络主机上测试这个,但遗憾的是我现在无法访问运行MVC4的任何内容.
提前致谢.
asp.net-mvc forms-authentication .aspxauth asp.net-mvc-4 simplemembership
cookies ×7
asp.net ×2
asp.net-mvc ×2
c# ×2
http ×2
javascript ×2
localhost ×2
python ×2
session ×2
.aspxauth ×1
cors ×1
django ×1
http-headers ×1
iframe ×1
node.js ×1
python-3.x ×1
sanic ×1
setcookie ×1
web ×1
websocket ×1