ashx调用中的cookie持久性

时间:2012-07-12 17:25:19

标签: asp.net c#-4.0 cookies ashx

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";

2 个答案:

答案 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。祝你好运..