在会话中保留查询字符串参数的位置?

时间:2010-05-26 16:13:43

标签: c# asp.net

用户将使用特定参数访问我的网站,例如: http://www.mysite.com/whatever/?keepTrackOfThisValue=foo 要么 http://www.mysite.com/who/cares/?keepTrackOfThisValue=bar

每当我在QueryString中找到它时,我想在Session中存储这个特殊参数的值。我目前正在使用Global.asax中的Session_Start事件来存储它,但我想在每次参数值改变时覆盖该值,这是我不可能的。

你会在哪里这样做?

6 个答案:

答案 0 :(得分:2)

尝试将其从Session_Start移至Application_BeginRequest

答案 1 :(得分:1)

[至少]有两种方法可以解决这个问题......

1)使用HttpModule挂钩应用程序的BeginRequest方法,如this page中所述。

2)创建一个基类(继承自System.Web.Page),应用程序中的所有页面都从该基类继承。然后使用此基类中的Page_Load方法将相同的功能推送到所有页面中。这还允许您在加载或任何其他事件中添加您在所有页面中可能需要的任何其他常用功能。您还可以使用它来定义所有页面的公共属性。

我从未尝试过#1,但我在我编写的每个Web应用程序中使用#2。例如,在我的PageBase类中,我提供了一个只读的基本属性,该属性公开了数据库连接获取机制,因此每个页面都可以轻松访问数据库,而无需编写自己的代码来从池中获取连接。它可以使整个代码更清晰。

答案 2 :(得分:0)

为什么不将它存储在Page_Load事件中(如果存在)?如果它没有引用Session值。

您甚至可以创建一个基页,让您的所有页面都可以检查您感兴趣的QueryString是否存在。

具有公共属性的MasterPage可以访问此值,例如:

// in your master page
public string YourSessionVariable
{
    get
    {
        string yourValue = "SomeDefault";  // if session expired and param not passed
        if (Request.QueryString["yourQueryParamName"] != null)
        {
            Session["yourSessionParamName"] = Request.QueryString["yourQueryParamName"];
        }
        return (Session["yourSessionParamName"] == null) ?
            yourValue : Session["yourSessionParamName"].ToString();
    }
}

// Then in your pages your can just fetch it anytime with
Master.YourSessionVariable

答案 3 :(得分:0)

这取决于我是如何使用它的,但我做的一件事就是静态类上的一个小包装器属性,当调用getter时,如果查询字符串不同,可以选择设置Session,然后返回会话

答案 4 :(得分:0)

在可能发生此查询字符串的每个页面上的page_load期间执行此操作

if(Session["keyName"] != null)
{
  Session["permitError"] = querysting;
}
else
{
   Session.Add("keyName", value);
}

答案 5 :(得分:0)

string StrQuery;

StrQuery =的Request.QueryString [ “值”]的ToString();

会话[ “SessionValue”] = StrQuery;