2

ユーザーがログインして、リモートデータベースに保存されている先週のスケジュールを確認できるasp.net c#Webアプリケーションがあります。サイトへのログインは、ユーザー名とパスワードがデータベース内の uname & pass レコードと一致するかどうかを確認するための SQL チェックのみで構成されます。ログインすると、スケジュールなどの時間エントリを操作できます。デバッグ中、2 人の異なるユーザーとしてログインしました。ユーザー B は、フォームにユーザー A のすべてのものを持っていました。私は通常の C# アプリを書いているようにプログラムを書きましたが、複数の人が同時に Web サイトを使用することについてはまったく考えていませんでした。インスタンスの処理は自動的に行われると思っていたのでしょうか? 私は asp.net を使って 1 週間ほどしか使っていませんが、あまりサポートを受けていません。

私の主な質問は、自分のサイトに同時に複数のユーザーがいる場合、どうすればそれらのユーザーのセッションを別々に保つことができるでしょうか?


更新 - セッション変数を追加した後

これは、ユーザー情報を取得するための私の sql ステートメントです。ここで、セッション変数を使用して:

string sqlquery = "SELECT FirstName, LastName, OperatorID FROM operators WHERE EmpID = '" + sql + "'";
        using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["EobrConnectionString"].ConnectionString))
        {
            conn.Open();
            using (MySqlCommand comm = new MySqlCommand(sqlquery, conn))
            {
                using (MySqlDataAdapter adapter = new MySqlDataAdapter(comm))
                {
                    DataTable dt = new DataTable();
                    adapter.Fill(dt);
                    foreach (DataRow dr in dt.Rows)
                    {
                        Session["Fname"] = dr[1].ToString();
                        Session["Lname"] = dr[2].ToString();
                        Session["opID"] = dr[3].ToString();
                     }
                }
            }
        }

メインメニューページにはこれがあります:

protected void Page_Load(object sender, EventArgs e)
{
    firstname = Session["Fname"].ToString();
    lastname = Session["Lname"].ToString();
    lblwelcome.Text = "Welcome, " + firstname + " " + lastname + ", make your selection below.";
}

ユーザー A がログインすると、自分の名前「Frank Drebbin」が表示されます。ユーザー B がログインすると、自分の名前「Jake Gaston」が表示されます。しかし今、最初のユーザー ページをリロードすると、名前が「Jake Gaston」と表示されます。

4

4 に答える 4

5

別のブラウザを使用する必要があります。ユーザーを識別するためにセッションを使用しており、セッションはブラウザーの Cookie と照合されます。上記のコメントから、次のことが起こります。

steve としてログイン -> セッションが作成された -> steve がユーザー名として保存された -> Cookie がブラウザに返された

新しいウィンドウで、frank としてログインします -> セッションは既に存在します。ユーザー名を frank に変更します。

最初のウィンドウの更新で。-> セッションのユーザー名はフランクではありません -> そのユーザー名に基づいてデータを返します。

新しい IE ウィンドウはすべて同じコンテキストを共有します。これは、1 つのウィンドウが Cookie を取得すると、すべてのウィンドウが取得することを意味します。これには 2 つの方法があります (実際には 3 つ)。

  • 物理的に異なるマシンを使用する
  • IE と Firefox などの 2 つのブラウザを使用する
  • IE で Alt キーを押してメニューを表示し、ファイル メニューから [新しいセッション] をクリックします。これにより、Cookie を共有しない物理的に別のウィンドウが作成されます (ただし、これを示すものは何もありません)。

上記を実行したら、Steve と Frank として再度ログインしてみてください。お互いに干渉していないことがわかるはずです。

于 2012-05-23T18:13:32.667 に答える
2

問題は、セッションが別々に保持されている間 (セッションに物を保存しているのではないでしょうか?)、データベースからデータをロードするクエリがユーザー名を考慮していないことだと思います。

タスクをロードする SQL クエリを見て、そのクエリにユーザー名 (またはユーザー ID) が含まれているかどうかを確認してください。ヘルプが必要な場合は、お気軽にクエリを投稿してください。

したがって、主な質問に直接答えるために、セッションに物を保存すると、他のセッションから適切に分離されます。ただし、間違ったデータを入力し、間違ったデータを出力します。

于 2012-05-23T16:45:41.197 に答える
0

編集: これをテストするには、別のブラウザを使用します。別のタブで同じブラウザを使用したり、別のウィンドウで同じブラウザを使用したりすることはできません。ほぼ同じセッションになります。

「セッション」を使用してユーザーのデータを保存する場合、それらは分離されます。つまり、ユーザーごとのデータを「セッション」またはCookieに保存する必要があります。

注:同時実行性を維持する必要がありますhttp://msdn.microsoft.com/en-us/library/cs6hb8k4(v=vs.80).aspx

于 2012-05-23T16:47:38.767 に答える