更改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的问题呢? 求教求教。