0

connStringがセッション変数に格納されているプロジェクトに取り組んでいます。問題は、ユーザーがしばらくいないとセッションが終了し(理にかなっている)、それによってユーザーが新しい接続を作成するために再度ログインする必要があることです。

ユーザーは、Webサーバーで構成されたODBC接続のリストからデータベースを選択します。したがって、ユーザーが必要に応じて新しい接続を追加できるため、ユーザーが選択できるさまざまなconnStringをweb.configに保存することはできません。

この問題を解決する方法を考えていました。コンピューターを20分以上放置しないようにユーザーに指示する必要がありますか、それともconnStringを別の場所に保存できますか?「セッションは5分で期限切れになります。サイトを使い続けるには、[OK]を押してください」などのポップアップが表示されるWebサイトを見たことがあります。

さらに、Webサイトは多くのユーザー間で共有されるため、静的変数を作成することはできません。したがって、user1が「connString1」を選択し、その後user2が「connString2」を選択した場合、user1は残念ながら「connString2」でも実行されます。

あなたが助けることができることを願っています:)

**

これは解決策になりますか?:ページが継承する「BasePage」を作成します。このベースページでは、隠しフィールドを作成し、ロード時にconnStringをvalueプロパティに追加します。さらに、connStringを暗号化して、ユーザーがソースコードの値を確認できないようにします。次に、セッションにタイムアウトがある場合、hiddenfieldの値を使用してセッションを復元し、サイトがクラッシュしません。

4

2 に答える 2

0

ユーザーの接続文字列設定をプロファイルに保存してから、プロファイルを保持できますか?http://odetocode.com/articles/440.aspx

匿名ユーザーに対してもこれを実行できるはずです。

余談ですが、プロファイルAPIがどれほど安全かはわかりませんが、問題ないはずですが、念のため、列挙値を格納してから、コード内の接続文字列にマップすることをお勧めします。

于 2013-03-16T18:01:11.820 に答える
0

app.configを使用して、構成ファイルを取得および設定できます。これを見て、ファイルの保存の実装を確認してください。設定を取得するのと同じくらい簡単です。 ConfigurationManagerは設定を保存しません

//編集:ユーザーに接続文字列名を表示させたくない場合は、hidden_​​htmlまたはcookieまたはsessioncookieで別の名前を提供できます。この例では、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.

それから:

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();
                }
            }

一方で。選択したユーザーデータベースを他のユーザーデータと一緒にデータベースに保存します。ただし、これは、プログラムによって設定された特定の時間にユーザーに選択された接続文字列のみを持たせたい場合に実行できます。接続文字列名を表示することはできません。これがお役に立てば幸いです。

于 2013-03-16T15:28:56.237 に答える