2012-07-12 136 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。祝你好運..