我到底是在那个创建COOKIE的类中添加过期时间,还是在登陆页面对应的那个cs文件里面设置;当我在创建cookie的那个类中设置cookie的过期时间为一个月后,我登陆,然后另开一个窗口访问之前用该用户已经登陆进来的页面的时候,老是报getcookie("键值")获得不到,没有将对象引用到实例,因为这个值是在登陆页面中的登陆按钮事件里面写的,这是第一个问题?
然后我改吧那个设置过期时间的那个代码放到登陆页面对应的cs页面中的时候,一运行那个登陆页面,就报没有将对象引用到实例的错误,这个是第二个问题?
第三,希望有人能够告诉我,像我这样的情况该么样设置cookie的过期时间?
对了,最好是选中登陆页面中的是否记住我复选框后就设置,否则就不设置!(我之前是在那个创建cookie类中写了一个方法专门用来设置cookie的过期时间,然后在登陆页面的复选框的选中事件中调用那个类中的那个方法的,但是还是报没有将对象引用到实例的错误)
最后只希望哪个大哥能够帮我解决这个问题
这个是那个创建cookie的类文件 public class MakeCookies
{
private string sTmpCookies = "";
private string sTmpKey = "";
private string mValue = "";
private HttpCookie cookie ;
public MakeCookies()
{
}
//创建Cookies
public void setCookies(string mKey, string mValue)
{
mValue = System.Web.HttpUtility.UrlEncode(mValue); if (sTmpCookies != "")
{
sTmpCookies += "," + mValue;
}
else
{
sTmpCookies += mValue;
} if (sTmpKey != "")
{
sTmpKey += "," + mKey;
}
else
{
sTmpKey += mKey;
} } //读取Cookies
public string getCookies(string mKey)
{ mValue = System.Web.HttpUtility.UrlDecode(System.Web.HttpContext.Current.Request.Cookies[mKey].Value);
return mValue;
} public string UpdateCookies()
{
try
{
string[] aTmpKey = sTmpKey.Split(',');
string[] aTmpCookies = sTmpCookies.Split(','); for (int i = 0; i < aTmpCookies.Length; i++)
{
cookie = new HttpCookie(aTmpKey[i]);
cookie.Value = aTmpCookies[i];
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
return "Update success!";
}
catch (Exception ex)
{
return "UpdateCookies:" + ex.Source + ex.Message;
}
}
}接下来是登陆页面的cs文件 InsertUsers ci = new InsertUsers();
MakeCookies cookies = new MakeCookies();
DataSet ds = null;
protected void Page_Load(object sender, EventArgs e)
{
this.TextBox1.Focus();
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
string username = this.TextBox1.Text;
string userpwd = this.TextBox2.Text;
int index = username.IndexOf('@');
if (index < 0)//没有找到
{
if (ci.userlogin(username, userpwd) > 0)
{
cookies.setCookies("user_name", username);
cookies.UpdateCookies();
Response.Redirect("登陆成功页面地址!");
}
else
{
Response.Write("<script language = 'JavaScript'>alert('请检查密码是否输入错误,或者请注册重新登陆!')</script>");
this.TextBox2.Focus();
this.TextBox2.Text = "";
}
}
else//找到了,说明该用户输入的是邮箱地址
{
//if (ci.userloginemail(username, userpwd) > 0)
//{
// cookies.setCookies("user_name", username);
// cookies.UpdateCookies();
// Response.Redirect("登陆成功页面地址!");
//}
//else
//{
// Response.Write("<script language = 'JavaScript'>alert('请检查密码是否输入错误,或者请注册重新登陆!')</script>");
// this.TextBox2.Focus();
// this.TextBox2.Text = "";
//}
//根据邮箱来查出该邮箱对应的用户名,返回一个dataset
ds = ci.userloginemail(username);
//从dataset中获得该邮箱对应的用户名
if (ds != null)
{
string newname = ds.Tables["UserInfo"].Rows[0]["UserName"].ToString();
cookies.setCookies("user_name", newname);
cookies.UpdateCookies();
Response.Redirect("登陆成功页面地址!");
}
else
{
Response.Write("<script language = 'JavaScript'>alert('请检查密码是否输入错误,或者请注册重新登陆!')</script>");
this.TextBox2.Focus();
this.TextBox2.Text = "";
}
}
}
然后我改吧那个设置过期时间的那个代码放到登陆页面对应的cs页面中的时候,一运行那个登陆页面,就报没有将对象引用到实例的错误,这个是第二个问题?
第三,希望有人能够告诉我,像我这样的情况该么样设置cookie的过期时间?
对了,最好是选中登陆页面中的是否记住我复选框后就设置,否则就不设置!(我之前是在那个创建cookie类中写了一个方法专门用来设置cookie的过期时间,然后在登陆页面的复选框的选中事件中调用那个类中的那个方法的,但是还是报没有将对象引用到实例的错误)
最后只希望哪个大哥能够帮我解决这个问题
这个是那个创建cookie的类文件 public class MakeCookies
{
private string sTmpCookies = "";
private string sTmpKey = "";
private string mValue = "";
private HttpCookie cookie ;
public MakeCookies()
{
}
//创建Cookies
public void setCookies(string mKey, string mValue)
{
mValue = System.Web.HttpUtility.UrlEncode(mValue); if (sTmpCookies != "")
{
sTmpCookies += "," + mValue;
}
else
{
sTmpCookies += mValue;
} if (sTmpKey != "")
{
sTmpKey += "," + mKey;
}
else
{
sTmpKey += mKey;
} } //读取Cookies
public string getCookies(string mKey)
{ mValue = System.Web.HttpUtility.UrlDecode(System.Web.HttpContext.Current.Request.Cookies[mKey].Value);
return mValue;
} public string UpdateCookies()
{
try
{
string[] aTmpKey = sTmpKey.Split(',');
string[] aTmpCookies = sTmpCookies.Split(','); for (int i = 0; i < aTmpCookies.Length; i++)
{
cookie = new HttpCookie(aTmpKey[i]);
cookie.Value = aTmpCookies[i];
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
return "Update success!";
}
catch (Exception ex)
{
return "UpdateCookies:" + ex.Source + ex.Message;
}
}
}接下来是登陆页面的cs文件 InsertUsers ci = new InsertUsers();
MakeCookies cookies = new MakeCookies();
DataSet ds = null;
protected void Page_Load(object sender, EventArgs e)
{
this.TextBox1.Focus();
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
string username = this.TextBox1.Text;
string userpwd = this.TextBox2.Text;
int index = username.IndexOf('@');
if (index < 0)//没有找到
{
if (ci.userlogin(username, userpwd) > 0)
{
cookies.setCookies("user_name", username);
cookies.UpdateCookies();
Response.Redirect("登陆成功页面地址!");
}
else
{
Response.Write("<script language = 'JavaScript'>alert('请检查密码是否输入错误,或者请注册重新登陆!')</script>");
this.TextBox2.Focus();
this.TextBox2.Text = "";
}
}
else//找到了,说明该用户输入的是邮箱地址
{
//if (ci.userloginemail(username, userpwd) > 0)
//{
// cookies.setCookies("user_name", username);
// cookies.UpdateCookies();
// Response.Redirect("登陆成功页面地址!");
//}
//else
//{
// Response.Write("<script language = 'JavaScript'>alert('请检查密码是否输入错误,或者请注册重新登陆!')</script>");
// this.TextBox2.Focus();
// this.TextBox2.Text = "";
//}
//根据邮箱来查出该邮箱对应的用户名,返回一个dataset
ds = ci.userloginemail(username);
//从dataset中获得该邮箱对应的用户名
if (ds != null)
{
string newname = ds.Tables["UserInfo"].Rows[0]["UserName"].ToString();
cookies.setCookies("user_name", newname);
cookies.UpdateCookies();
Response.Redirect("登陆成功页面地址!");
}
else
{
Response.Write("<script language = 'JavaScript'>alert('请检查密码是否输入错误,或者请注册重新登陆!')</script>");
this.TextBox2.Focus();
this.TextBox2.Text = "";
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货