c#如何将此数据转换为cookie?

时间:2011-03-19 18:36:56

标签: c# asp.net api cookies

我正在为论坛API制作一个包装器,一个函数返回这个,这意味着为你提供足够的信息来设置一个cookie来记录用户:

<?xml version="1.0" encoding="utf-8" ?>    
<ApiResponse>    
 <ErrorCode>0</ErrorCode>    
 <ErrorDescription/>    
 <ResultData recordcount="1">    
  <Record>  
   <Username>Gullanian</Username>    
   <UserID>4</UserID>    
   <CookieName>WWF9sLID</CookieName>    
   <CookieKey>UID</CookieKey>    
   <CookieData>Gullanian-CD45-ZCB-D72Z-AAC6</CookieData>    
   <CookiePath>/scirranew/forum/</CookiePath>
   <ForumPath>http://127.0.0.1/scirranew/Forum/</ForumPath> 
  </Record>    
 </ResultData>    
</ApiResponse>

我已经达到了这个目标:

public class WebWizCookie
{
    public string Username { get; set; }
    public int UserID { get; set; }
    public string CookieName { get; set; }
    public string CookieKey { get; set; }
    public string CookieData { get; set; }
    public string CookiePath { get; set; }
    public string ForumPath { get; set; }

    /// <summary>
    /// Loads this cookie so user is logged in with this cookie data.
    /// </summary>
    public void LoadCookie(double MinutesExpiry)
    {
        HttpCookie Cookie = new HttpCookie(this.CookieName);
        Cookie[this.CookieKey] = this.CookieData;
        Cookie.Domain = this.CookiePath;
        Cookie.Expires = DateTime.Now.AddMinutes(MinutesExpiry);

        HttpContext.Current.Response.Cookies.Add(Cookie);
    }

它正在返回所有值,但是当我调用此函数时,我没有登录到站点。有谁知道我在这里做错了什么?忘记设置某些内容,或者设置不正确?

编辑,打印输出值

设置cookie后,如果我打印出值:

HttpContext.Current.Response.Write("Cookie[" + this.CookieKey + "] = " + this.CookieData + "<br />");
HttpContext.Current.Response.Write("Cookie.Domain = " + ConfigurationSettings.AppSettings["MasterDomainRoot"] + "<br />");

我明白了:

Cookie[UID] = Gullanian2-4B9B-9D5-27E2-A413
Cookie.Domain = http://localhost/ScirraNew
UID

在谷歌浏览器中,开发人员工具说有一个cookie:

enter image description here

2 个答案:

答案 0 :(得分:1)

第一步是确定是否正确创建了cookie。你检查过吗? (您可以使用Firefox的web developer toolbar执行此操作。)

答案 1 :(得分:1)

您的Cookie.Domain错了。请参阅MSDN上的HttpCookie.Domain - 它应仅包含域(例如“localhost”)而不是完整路径(“http:// localhost / ScirraNew”)。如果您想将Cookie限制为仅限于网站的某些部分,则会有一个Path属性,但这是一个很少使用的功能(我从来没有遇到过这样做的理由)。

顺便说一句,您不需要设置Domain属性 - 默认情况下,Cookie由同一域中的所有页面共享。如果你必须在不同的子域之间共享cookie,你真的只需要设置它(例如www.mysite.com和secure.mysite.com,你需要将Domain设置为“mysite.com”)