0

我从事一个项目,其中 connString 存储在会话变量中。问题是,当用户有一段时间不在时会话就会结束(这是有道理的),从而使用户不得不再次登录以创建新连接。

用户从 Web 服务器上配置的 ODBC 连接列表中选择他的数据库,因此用户可以从中选择的不同 connString 不能存储在 web.config 中,因为用户可以根据需要添加新的。

我想知道如何解决这个问题。我应该告诉用户不要离开他的电脑超过 20 分钟,或者我可以将 connString 存储在其他地方吗?我见过网站弹出“您的会话将在 5 分钟后到期,请按确定以继续使用该网站”或类似的内容。

此外,由于网站在许多用户之间共享,因此不可能制作静态变量,因此如果 user1 选择“connString1”而 user2 随后选择“connString2”,那么不幸的是 user1 也将在“connString2”上运行。

希望你能帮忙:)

**

这可以是一个解决方案吗?:我创建了一个我的页面继承自的“BasePage”。在这个基本页面中,我创建了一个隐藏字段并将 connString 添加到加载时的 value 属性中。此外,我将对 connString 进行加密,以便用户无法看到源代码中的值。然后,如果会话超时,我将使用隐藏字段中的值恢复会话,并且站点不会崩溃。

4

2 回答 2

0

You could use the app.config to get and set config files. Take a look at this to see implementation of storing files. Its just as easy to get settings. ConfigurationManager doesn't save settings

//Edit: If you don't want the user to be able to see your connectionstring name then you can provice an another in hidden_html or cookie or session cookie. In this example I use a cookie. THis should solve your problem.

To set cookie:

HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie["ConnectionString"] = "MyCOnnectionValue";
myCookie.Expires = DateTime.Now.AddDays(1d);//For one day.
Response.Cookies.Add(myCookie);//Will store the cookie within the users browser so your code can read from it at every request.

then:

if (Request.Cookies["UserSettings"] != null)
{
    string userSettings;
    if (Request.Cookies["UserSettings"]["ConString"] != null)
    { userSettings = Request.Cookies["UserSettings"]["ConString"]; }
}

string connectionStringNameToUse;

if(userSettings =="Connection1"){
    connectionStringNameToUse = "here you can have your name of connectionsstring";
}etc with ypur other connectionsstrings here. 

//Then use your connectionsstring here:
    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings[connectionStringNameToUse ].ToString()))
                {
                cn.Open();

                using (SqlCommand command = new SqlCommand
                    ("delete TBL from RatingListObjects TBL where ( TBL.TradeObject1Id = @MY_ID ) or ( TBL.TradeObject2Id = @My_ID ) ", cn))
                {
                    command.Parameters.Add(new SqlParameter("@MY_ID", customerToRemove.TradeObjectId));
                    command.ExecuteNonQuery();
                }
            }

On the other hand. I would go for saving the users database of choice in with the other user data in the db. But this is doable if you only want the user to have a chosen connectionsstring a certain time, set by the program. It wont allow them to see the connections string name. Hopes this helps, good luck!

于 2013-03-16T15:28:56.237 回答
0

您可以将用户的连接字符串首选项存储在他们的个人资料中,然后保留他们的个人资料吗?http://odetocode.com/articles/440.aspx

您还应该能够为匿名用户执行此操作。

顺便说一句,我不知道 Profile API 有多安全,它们应该没问题,但以防万一,您可能希望存储一个 Enum 值,然后将其映射到代码中的 Connection 字符串。

于 2013-03-16T18:01:11.820 回答