2012-07-12 80 views
0

siteA.com调用sitecookie.com/cookies.ashx并设置sitecookie.com域的cookie “cookiename”。 同一浏览器,同一个窗口,新的标签,siteB.com调用sitecookie.com/cookies.ashx并试图获得相同的cookie“cookiename”(再次sitecookie.com域)但为空。Cookie持久性要求

cookies.ashx实现IHttpHandler的,IReadOnlySessionState和conformsTo [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

所以,问题是,为什么它空,我们可以找回?

这就是如何使从站点A和站点B的请求:

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是一个字符串。

​​

这是我怎么写的cookie中cookies.ashx

HttpCookie cookie = new HttpCookie("sso"); 
      cookie.Value = context.Request.QueryString["token"]; 
      cookie.Expires = DateTime.Now.AddDays(1); 
      context.Response.AppendCookie(cookie); 
      return "true"; 

回答

1

原来因为对http://sitecookie.com/cookies.ashx每次通话将被视为新的要求,asp.net将启动一个新的,这是不可能的的sessionId。要坚持的唯一方法是存储sessionid并在每个后续请求中传递它。对我来说,解决方案不会工作,因为我有很多客户端调用服务,我将无法在这些客户端之间传递sessionid。

0

你的答案是正确的,但也可以检索后续.ashx的通话之间饼干。你需要你的ashx的文件从一个文件或从数据库记录“检索”饼干在你的ashx的文件代码的开始(我和我的数据库通过命名管道通信,实现这一点),和“存储”他们进入.ashx文件代码末尾的相同文件或同一数据库记录中。

不要忘记记录您的Cookie的这些基本组件:名称,价值,域名,仅Http,安全和路径,并重新生成这些组件正确设置cookies或者其他任何方法都行不通!但是 - 如果你这样做是正确,你可以“傻瓜”远程服务器 - 这可能造成在首位的饼干 - 看看在你的ashx的文件中的代码调用没有区别,当你与它通信(?使用HTTP)和通过其在cookie容器中来回放置cookie。祝你好运..