关于自动更新登陆次数的问题
我想当用户登陆的时候就自动更新登陆表里的信息,可是当我在应用程序里写时,发现Session不能在里头用,这是为什么啊!各位大侠帮帮忙啊
protected void Application_Start(Object sender, EventArgs e)
{
SqlConnection con=DB.createConn();
con.Open();
string userName=Session[ "userName "].ToString();
string sqlLoginNum= "select userLoginNum from userDetails where userName= ' "+userName+ " ' ";
SqlCommand cmd=new SqlCommand(sqlLoginNum,con);
int count=Convert.ToInt32(cmd.ExecuteScalar());
Application[ "total "]=count;
con.Close();
}
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application[ "total "]=(int)Application[ "total "]+1;
Application.UnLock();
}
protected void Application_End(Object sender, EventArgs e)
{
SqlConnection con=DB.createConn();
con.Open();
string userLogin=Session[ "userName "].ToString();
string sqlLoginNum= "update userDetails set userLoginNum= ' "+Application[ "total "].ToString()+ " ' where userName= ' "+userLogin+ " ' ";
SqlCommand cmd=new SqlCommand(sqlLoginNum,con);
cmd.ExecuteNonQuery();
con.Close();
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息:
System.Web.HttpException: 会话状态在此上下文中不可用。
源错误:
行 30: SqlConnection con=DB.createConn();
行 31: con.Open();
行 32: string userName=Session[ "userName "].ToString();
行 33: string sqlLoginNum= "select userLoginNum from userDetails where userName= ' "+userName+ " ' ";
行 34: SqlCommand
------解决方案--------------------不在这里写,在登录成功之后写。
------解决方案--------------------1 登陆成功应该在页面操作
2 如果想访问Session可以这样用 System.Web.HttpContext.Current.Session
------解决方案--------------------protected void Session_Start(Object sender, EventArgs e)
{
}
//是服务器会话开始的时间,比如你打开OA的起始页面(还没有点击登录)这个时间已经开始了
在这个时间当中应该能得到SessionID但是这个ID是服务器为了分别不同用户产生不同会话,自己创建的,和平时理解的session[ "UserName "]不一样,这个ID是为了,三个用户同时提交一个页面的请求,返回页面