更改moss2007机器名后引起session丢失的临时解决

近几日一直被session丢失问题烦恼,怎么也找不到原因,发到csdn上也问不出个所以然,先贴上我的问题吧。

我已经将站点加入了信任站点,该站点下的config文件我也做了修改,去掉了session节点注释,enableSessionState也改成了true,trust level也是Full,但Session还是丢失。
下边是我的测试代码。

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Web;

namespace SessionTest
{
    [Guid("3116c654-4c63-49c8-9d4d-62cabd8365b7")]
    public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart,ICallbackEventHandler       
    {
        public WebPart1()
        {
        }

        protected override void OnLoad(EventArgs e)
        {
            ClientScriptManager scriptManager = this.Page.ClientScript;

            string eventRef = scriptManager.GetCallbackEventReference(this, "argVal", "OnCallComplete", "ctxVal", "OnErrorOccurs", true);

            StringBuilder sb = new StringBuilder();

            sb.Append("function InvokeMethod(argVal,ctxVal)");
            sb.Append(Environment.NewLine);
            sb.Append("{");
            sb.Append(Environment.NewLine);
            sb.Append(eventRef);
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);

            sb.Append("function OnCallComplete(result,context)");
            sb.Append(Environment.NewLine);
            sb.Append("{");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);

            sb.Append("function OnErrorOccurs(err)");
            sb.Append(Environment.NewLine);
            sb.Append("{");
            sb.Append(Environment.NewLine);
            sb.Append("window.status = err;");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);

            scriptManager.RegisterClientScriptBlock(base.GetType(), "CallBackScript", sb.ToString(), true);

            base.OnLoad(e);
        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            Button btn = new Button();
            btn.Text = "PostBack";
            btn.Click += new EventHandler(btn_Click);
            this.Controls.Add(btn);


            HtmlButton htmlBtn = new HtmlButton();
            htmlBtn.ID = "CallBack";
           
            htmlBtn.Attributes.Add("Value", "CallBack");
            string clickjs = string.Format("javascript:InvokeMethod('{0}')", DateTime.Now.ToString());
            htmlBtn.Attributes.Add("onclick", clickjs);

            this.Controls.Add(htmlBtn);
            // TODO: add custom rendering code here.
            // Label label = new Label();
            // label.Text = "Hello World";
            // this.Controls.Add(label);
        }

        void btn_Click(object sender, EventArgs e)
        {
            //this.Page.Session["Test"] = "Postback";
            HttpContext.Current.Session["Test"] = "Postback";        }

        #region ICallbackEventHandler Members

        public string GetCallbackResult()
        {
            return "";
        }

        public void RaiseCallbackEvent(string eventArgument)
        {
            //this.Page.Session["Test"] = "CallBack";
            HttpContext.Current.Session["Test"] = "Callback";        }

        #endregion
    }
}

我将这个webpart加入一个新的页面后,每次debug进去发现这个session总是空的。
只是先测试postback,每次点postback Button进去后session都是空的。

今日突然想起会不会是我之前修改机器名导致的,还好修改前的备份还在,测试发现,的确修改之前session还好好的,机器名修改后就不行了,不知什么原因。
然后利用trace.asd页面,发现修改后每次sessionid都在变化,这当然会导致session丢失了。
针对这个发现,添加以下配置
system.web>
    
<sessionState cookieless="true"
      regenerateExpiredSessionId
="true" />
  
</system.web>
问题顺利解决。
但疑惑还是没有解除,为什么我修改机器名后会引起这个sessionid的问题呢?  求教求教。

posted @ 2008-06-14 01:36  彷徨......  阅读(413)  评论(1编辑  收藏  举报