siteA.com致电sitecookie.com/cookies.ashx并为sitecookie.com域设置cookie“cookiename”。 相同的浏览器,相同的窗口,新标签,siteB.com调用sitecookie.com/cookies.ashx并尝试获取相同的cookie“cookiename”(同样适用于sitecookie.com域名)但是为空。 < / p>
cookies.ashx实现IHttpHandler,IReadOnlySessionState和conformsTo [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
所以问题是,为什么它是null并且我们可以检索它吗?
这是我从siteA和siteB发出请求的方式:
WebClient fs = new WebClient();
var data = fs.DownloadData("http://sitecookie.com/cookies.ashx");
var tostring = System.Text.Encoding.ASCII.GetString(data);
return tostring;
这就是我在cookies.ashx中读取cookie的方式,返回值是一个字符串。
var cookie = context.Request.Cookies["cookiename"];
if (cookie != null) return cookie.Value;
return "false";
这就是我在cookies.ashx中写cookie的方式
HttpCookie cookie = new HttpCookie("sso");
cookie.Value = context.Request.QueryString["token"];
cookie.Expires = DateTime.Now.AddDays(1);
context.Response.AppendCookie(cookie);
return "true";
答案 0 :(得分:1)
事实证明这是不可能的,因为每次调用http://sitecookie.com/cookies.ashx都被视为新请求,asp.net将启动一个新的sessionId。唯一的持久方法是存储sessionid并在每个后续请求中传递它。对我来说,解决方案无法工作,因为我有许多客户端调用该服务,我将无法在这些客户端之间传递sessionid。
答案 1 :(得分:0)
您的回答是正确的,但可以在后续的.ashx调用之间检索Cookie。您需要.ashx文件在.ashx文件代码的开头从文件或数据库记录中“检索”cookie(我通过命名管道与我的数据库通信以实现此目的),并将它们“存储”到相同的文件或.ashx文件代码末尾的同一数据库记录。
不要忘记记录您的cookie的这些基本组件:名称,值,域,HttpOnly,安全和路径,并重新设置正确设置这些组件的cookie,否则什么都不会起作用!但是 - 如果你正确地做了,你可以'愚弄'你的远程服务器 - 这可能首先创建了cookie - 看你的.ashx文件代码调用没有区别(使用Http?)并传递它在cookie容器中来回拥有cookie。祝你好运..