经常遇到session丢失的问题,原来的解决方法是直接跳转到登陆页面让用户登陆,可是这样用户又需要再到系统里一步一步的查找刚才操作的页面
所以想了很久之后我采用了如下的方法解决这个问题,拿出来也希望大家给我提提优化的建议
在登陆成功之后我添加了如下的代码
if (!String.IsNullOrEmpty(Request.QueryString["errorPageUrl"].ToString().Trim()))
{
string recURL = Request.QueryString["errorPageUrl"].ToString().Trim();
//--------------------传过来的URL转换-----------------
recURL = recURL.Trim().Replace("_", ".");
recURL = recURL.Trim().Replace("^", "/");
recURL = recURL.Trim().Replace("/aa.NET/", "");
recURL = recURL.Trim().Replace("$", "?");
recURL = recURL.Trim().Replace("*", "&");
//--------------------传过来的URL转换完毕-----------------
Response.Write("<script> location.href='" + recURL + "' ;</script>");
}
我的思路是,当session丢失那么我就让系统自动的转入登陆页面,并且传一个参数让登陆页面区分是丢失了还是首次进入,首次进入的话传入的参数为空,那么给代码段不执行,否则跳转回原来的页面,原来的页面的连接其实就就包含在传过来的参数中为了避免混乱我把参数中的连接的一些诸如'.','/'这些符号都给转换成别的符号,登陆之后又转换回来然后通过js脚本跳转回丢失session时操作的页面
下面的代码是放在每个包含session的页面中的
try
{
string username = Session["name"].ToString().Trim();
}
catch (Exception exp)
{
string file = "";
string arrayurl = HttpContext.Current.Request.Url.PathAndQuery;
file = (arrayurl.Trim()).Replace(".", "_");
file = ((arrayurl.Trim()).Replace("/", "^"));
file = (arrayurl.Replace("?", "$"));
file = arrayurl.Replace("&", "*");
Response.Redirect("~/Login.aspx?errorPageUrl=" + file);
}
这个代码是我现在用的 大家多多提建议啊