ASP.NET Cookie设置没有任何价值

时间:2014-02-20 21:55:27

标签: asp.net asp.net-mvc-4

我正在尝试通过cookie将数据从登录控制器传递到家庭控制器。这似乎不应该是一个大问题,但cookie正在被写成没有价值。相当令人沮丧。

我用来设置cookie的代码:

Customer user = new Customer();
int pass;
pass = MD5Hash(formResult.password);
if (pass == customer.CM_PASSWORD_HASH)
{
    FormsAuthentication.SetAuthCookie(customer.CM_FULL_NAME, true);
    HttpCookie userCookie = new HttpCookie("User");

    userCookie.Values.Add("id", customer.CM_CUSTOMER_ID.ToString());
    userCookie.Values.Add("companyid", customer.CM_COMPANY_ID.ToString());
    userCookie.Values["type"] = "customer";
    userCookie.Values["name"] = customer.CM_FULL_NAME;

    HttpContext.Response.Cookies.Set(userCookie);

    return RedirectToAction("Index", "Home");
}

这就是我想用来读取cookie的内容:

if (Request.Cookies.AllKeys.Contains("User"))
{
    HttpCookie userCookie = HttpContext.Request.Cookies["User"];
    switch (userCookie.Values["type"])
    {
        case "customer":
            Customer customer = new Customer();
            customer.BridgeTrakId = Int32.Parse(Response.Cookies.Get("User").Values["id"]);
            customer.CompanyId = Int32.Parse(Response.Cookies.Get("User").Values["companyid"]);
            customer.Name = Response.Cookies.Get("User").Values["name"];
            model.User = customer;
            model.Equipment = DataAccess.EquipmentRepository.GetEquipment(customer.BridgeTrakId);
        break;
        default:
            break;
    }
}

Cookie已创建,当我在Chrome工具中查看时,名称就在那里,但值为空。当我在visual studio中查看userCookie时,它显示它有一个值。

任何人都可以向我解释我失去了价值的地方,以及我如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

尝试设置cookie。

        HttpCookie cookie = new HttpCookie("Cookie");
        cookie.Value = "Hello Cookie! CreatedOn: " + DateTime.Now.ToShortTimeString();

        this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
        return RedirectToAction("Index", "Home");

答案 1 :(得分:1)

您想要检索与类型相同的 id,companyid和名称

HttpCookie userCookie = HttpContext.Request.Cookies["User"];
switch (userCookie.Values["type"])
{
    case "customer":
        Customer customer = new Customer();
        customer.BridgeTrakId = Int32.Parse(userCookie.Values["id"]);
        customer.CompanyId = Int32.Parse(userCookie.Values["companyid"]);
        customer.Name = userCookie.Values["name"];
        ...
        break;
    default:
        break;
}

另一种方法

Request.Cookies["User"]["type"]
Request.Cookies["User"]["id"]
Request.Cookies["User"]["companyid"]
Request.Cookies["User"]["name"]

注意:我不知道传递数据背后的原因。理想情况下,您不希望cookie只是为了在控制器之间传递数据。相反,您希望使用 QueryString SessionState

相关问题