我有一个检查Session和Cookies的功能,并根据这些功能重定向用户。
private void CheckRecruiterLogin()
{
List<string> list = new List<string>();
if (Session["Candidate"] != null ||
Request.Cookies["Candidate"] != null)
{
list = (List<string>)Session["Candidate"];
string status = list[1].ToString();
if (status.Equals("applicant") ||
Request.Cookies["Candidate"]["Status"].Equals("applicant"))
{
Response.Redirect("ApplicantHome.aspx");
}
if (status.Equals("preboarding") ||
Request.Cookies["Candidate"]["Status"].Equals("preboarding"))
{
Response.Redirect("PreboardingHome.aspx");
}
else if (status.Equals("hiring") ||
Request.Cookies["Candidate"]["Status"].Equals("hiring"))
{
Response.Redirect("HiringHome.aspx");
}
}
else if (Session["HR"] != null || Request.Cookies["HR"] != null)
{
list = (List<string>)Session["HR"];
string type = list[1].ToString();
if (type.Equals("preboarder") ||
Request.Cookies["HR"]["Type"].Equals("preboarder"))
{
Response.Redirect("PreboarderList.aspx");
}
else if (type.Equals("datamanager") ||
Request.Cookies["HR"]["Type"].Equals("datamanager"))
{
Response.Redirect("HiringList.aspx");
}
else if (type.Equals("admin") ||
Request.Cookies["HR"]["Type"].Equals("admin"))
{
Response.Redirect("AdminHome.aspx");
}
}
else if (Session["HR"] == null &&
Request.Cookies["HR"] == null)
{
Response.Redirect("index.aspx");
}
}
但应用程序抛出运行时异常,说Object reference not set to an instance of an object.
我认为这是因为没有cookie存在。
我的问题是:我应该分开会话和cookie的检查,还是可以在一个声明中进行检查?
谢谢!
答案 0 :(得分:1)
您的代码需要 Cookie和会话。
如果是这样,您希望更改条件以使用&&
而不是||
。
但是,如果可用,您更有可能打算使用会话,如果会话不存在则使用cookie。这很简单,只需将值存储在变量中,然后再使用它:
if (Session["Candidate"] != null || Request.Cookies["Candidate"] != null)
{
var list = Session["Candidate"] as List<string>;
var status = list == null ? Request.Cookies["Candidate"]["Status"] : list[1];
if (status == "applicant")
{
...
}
...
}
也就是说,使用cookie进行安全检查是个坏主意 - 用户可见并且用户可以编辑。
此外,使用Equals
毫无意义 - 只需使用==
即可。这不是Java,.NET实际上是比较值,而不是引用。虽然使用不变文化进行比较可能是一个更好的主意,但不区分大小写。创建new List<string>
也没有意义 - 永远不会使用该值。只需在你已经有东西要填充它的位置声明变量。
答案 1 :(得分:0)
如果Request
有一个名为&#34; HR &#34;如果没有具有此名称的cookie,则会抛出异常。因此,您首先需要检查CookieCollection
是否有任何名称为&#34; HR &#34;的Cookie。这是检查CookieCollection
是否具有给定名称的cookie的方法。
if(Request.Cookies.Get("cookieNmae") !=null)
所以改变你的if语句
if (Session["HR"] != null || Request.Cookies.Get("HR") !=null)