网站在本地运行一切正常,局域网运行也正常,今天把网站挂到外网上去,发现session失效了。
登录页面记录用户名为session,其他页面运行都要先判断session是否为null,如果为null会返回登录页面。在外网登录该网站,填完正确的用户名和密码后,会马上返回登录页面,就行刷新了一边登录页面一样。
远程服务器客服说不是他们那边的问题。
请问,到底是什么原因导致session失效?

解决方案 »

  1.   

    先检查下代码,看看代码里面有没有清session的动作,
    实在不行,就换cookie吧。。
      

  2.   

    导致Session失效的原因有很多。。尝试着用Session+Cookie.
      

  3.   

    先查看代码,确定是否是session问题,或者是不是浏览器之类的问题。导致session失效的原因很多 google 百度 一堆,解决方法也很多
      

  4.   

    要先看session是以什么形式存储的再做判断
      

  5.   

    本地运行都正常的,原先一直在局域网使用该系统,按说程序应该没问题。前几天有客户要看该系统,让我们把系统挂到外网上先看看,但是在外网上,session根本就不存值
      

  6.   

    这是登录界面的按钮
     protected void btnLogin_Click(object sender, EventArgs e)
            {
                try
                {
                    Staff staff = PollManager.DAL.StaffDAL.GetModelByName(this.txtUser.Text.ToString());
                    if (staff == null)
                    {
                        lblMsg.Text = "不存在指定的用户!";
                        return;
                    }
                    string pass = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(this.txtPass.Text.ToString().Trim(), "MD5");
                    if (!staff.Password.Trim().Equals(pass))
                    {
                        lblMsg.Text = "密码错误!";
                        txtPass.Focus();
                        return;
                    }
                    else
                    {
                        Guid userId = staff.uid;
                        Session["user"] = userId;                }
                }
                catch (System.Data.SqlClient.SqlException)
                {
                    lblMsg.Text = "无法连接到登录服务器";
                    return;
                }            string url = (string)Request["return"];
                if (String.IsNullOrEmpty(url))
                {
                    Response.Redirect("~/Index.aspx");
                }
                else
                    Response.Redirect(url);        }
      

  7.   

    这是其他页面对session的判断
     protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["user"] == null)
                {
                    //用户未登录转到登录页面
                    string url = "/Login.aspx?return=" + Toolkit.GetPagePath(Request);
                    Response.Redirect(url);
                }            if (!IsPostBack)
                {
                    Guid userId = (Guid)Session["user"];
                    Staff staff = PollManager.DAL.StaffDAL.GetModel(userId);
                    this.lbluser.Text = staff.Name;                if (staff.Job.Name.Trim().Equals("管理员"))
                    {
                        this.user.Visible = false;
                    }
                    else
                    {
                        tabAdmin.Visible = false;
                        setTime.Visible = false;
                    }                string endTime = System.Web.Configuration.WebConfigurationManager.AppSettings["SetEndTime"];
                    txtSetTime.Value = endTime;
                    this.lblTime.Text = "投票截止时间:" + endTime + ", 逾期视为弃权!";            }
            }
      

  8.   

    asp.net 执行 Response.Redirect 时会强制终止当前Response ,不发送当前页面的cookie 给浏览器,而是发送一个指令告诉浏览器重新发送一个新的HTTP请求到新的URL,结果导致当前的Session 丢失。老外的一个解决办法就是使用Response.Redirect(“~/default.aspx”, false)
      

  9.   

    session丢失是很正常的事情。在Inproc模式下,asp.net本来就不保证session。这在msdn上关于《应用程序状态管理》的文档中写的很清楚。怪只怪你学习asp.net的时候被入门书忽悠了,只知道套用session使用的代码,而没有从一开始就学会不用session如何编写程序。session丢失的原因有千百种,微软自己也说不清楚。IIS以及asp.net,会在正常的系统维护中重新启动应用程序池,这样才能保证网站总是看起来正常连续运行。例如你可以在自己的IIS上配置,当CPU使用到7%、内存使用到30%M、连接数超过200个、连续使用10分钟等等条件时就自动重新回收一次。等等。另外比如应用程序一旦修改了出app_data目录下其它目录的文件、子目录,网站应用也就瞬间重启了。等等这些都会引起session以及静态内存变量值等等一切内存数据丢失。
      

  10.   


    如果说“根本就不存值”这个有点夸张。除非你们选择了某些实在是太烂的虚拟值主机。正常情况下,每隔10几分钟丢失一次session,这还是比较正常的。实际上在我们自己拥有的独立的服务器上,也会因为各种原因(例如上面说的各种编程设计原因)而使得session经常丢失。因为asp.net本来设计的时候就是默认假设服务程序随时重启的,这个系统的设计目的就是在系统重启时从客户端看起来感觉不到,而能够继续操作。因此编程时应该尽量避免使用session,这样才能避免出现那种“动不动就让用户重新登录”的幼稚程序。
      

  11.   


    就算此时“不发送当前页面的cookie 给浏览器”,怎么就会导致session丢失呢?
      

  12.   


    你看看吧
    http://weblogs.asp.net/bleroy/archive/2004/08/03/don_2700_t-redirect-after-setting-a-session-variable-_2800_or-do-it-right_2900_.aspx