我正在为论坛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:
答案 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”)