2 votes

Asp.net utilisateurs multiples?

Je possède une application web asp.net c# où un utilisateur peut se connecter et voir son emploi du temps de la semaine dernière, qui est stocké dans une base de données distante. La connexion au site se fait simplement par une vérification SQL pour voir si le nom d'utilisateur et le mot de passe correspondent aux enregistrements uname & pass dans la base de données. Une fois connecté, ils peuvent manipuler les entrées de temps pour l'emploi du temps, etc. En déboguant, je me suis connecté en tant que deux utilisateurs différents. L'utilisateur B avait toutes les informations de l'utilisateur A sur son formulaire. J'ai programmé comme si j'écrivais une application c# régulière et je n'ai pas vraiment réfléchi au fait que plusieurs personnes pourraient utiliser le site en même temps. Je pensais que la gestion des instances serait automatique ? Je travaille avec asp.net depuis seulement une semaine environ et je n'ai pas beaucoup de support.

Ma question principale est, si j'ai plusieurs utilisateurs sur mon site en même temps, comment puis-je maintenir leurs sessions séparées ?


mise à jour - après avoir ajouté des variables de session

Voici ma requête SQL pour obtenir les informations de l'utilisateur. Maintenant, en utilisant des variables de session :

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

Sur la page du menu principal, j'ai ceci :

protected void Page_Load(object sender, EventArgs e)
{
    firstname = Session["Fname"].ToString();
    lastname = Session["Lname"].ToString();
    lblwelcome.Text = "Bienvenue, " + firstname + " " + lastname + ", faites votre sélection ci-dessous.";
}

Quand l'utilisateur A se connecte, il voit son nom "Frank Drebbin". Quand l'utilisateur B se connecte, il voit son nom, "Jake Gaston". Mais maintenant, si je recharge la page du premier utilisateur, il voit le nom comme "Jake Gaston".

5voto

Simon Halsey Points 4114

Vous devez utiliser des navigateurs séparés. Vous utilisez des sessions pour identifier les utilisateurs, et les sessions sont associées à un cookie dans votre navigateur. D'après vos commentaires ci-dessus, voici ce qui se passe :

Connectez-vous en tant que Steve -> session créée -> Steve stocké comme nom d'utilisateur -> cookie renvoyé au navigateur

Dans une nouvelle fenêtre, connectez-vous en tant que Frank -> la session existe déjà, renommez le nom d'utilisateur en Frank.

Dans la 1ère fenêtre, rafraîchissez. -> le nom d'utilisateur de la session n'est pas Frank -> renvoyez les données en fonction de ce nom d'utilisateur.

Les nouvelles fenêtres IE partagent toutes le même contexte. Cela signifie que si une fenêtre obtient un cookie, elles l'ont toutes. Il y a 2 moyens de contourner ce problème (en fait 3).

  • Utiliser des machines physiquement différentes
  • Utiliser 2 navigateurs, par exemple IE & Firefox
  • Dans IE, appuyez sur alt pour obtenir le menu, puis cliquez sur nouvelle session dans le menu Fichier. Cela crée une fenêtre physiquement séparée qui ne partagera pas les cookies (bien qu'il n'y ait rien pour vous l'indiquer)

Après avoir fait ce qui précède, essayez à nouveau de vous connecter en tant que Steve & Frank et vous verrez qu'ils n'interfèrent pas l'un avec l'autre.

2voto

Eric J. Points 73338

Je supposerais que le problème est que, bien que les sessions soient conservées séparément (vous stockez des choses dans Session, non ?), les requêtes qui chargent des données depuis la base de données ne prennent pas en compte le nom d'utilisateur.

Jetez un œil à la requête SQL qui charge les tâches et vérifiez si vous incluez le nom d'utilisateur (ou un identifiant d'utilisateur) dans cette requête. N'hésitez pas à poster la requête si vous avez besoin d'aide pour l'examiner.

Pour répondre directement à votre question principale, si vous stockez des choses dans Session, elles seront correctement isolées des autres sessions. Cependant, mauvaises données en entrée, mauvaises données en sortie.

0voto

EDIT : Utilisez un autre navigateur pour tester ceci, vous ne pouvez pas utiliser le même navigateur dans un autre onglet, ou le même navigateur dans une autre fenêtre, ce sera presque la même session

Si vous utilisez une "Session" pour enregistrer les données de l'utilisateur alors elles sont séparées, cela signifie que vous devriez stocker toutes les données par utilisateur dans une "Session" ou des cookies.

NOTE : Vous devriez maintenir la concurrence http://msdn.microsoft.com/en-us/library/cs6hb8k4(v=vs.80).aspx

0voto

MHHasnain Points 136

La solution est très simple ( UTILISATEUR UTILISEZ DIFFÉRENTS NAVIGATEURS SIMULTANÉMENT) comme IE, Firefox, Chrome etc........

Vous n'utilisez pas de transact SQL donc pas besoin de vous soucier de la concurrence,

mais lorsque vous vous connectez le navigateur actuel crée une session, si vous utilisez le même navigateur il conservera cette session,

Si vous utilisez un autre navigateur, le navigateur aura la session mais la valeur ne sera pas la même.

par exemple

chaque téléphone portable possède des navigateurs différents maintenant si vous avez 100 téléphones portables cela signifierait que vous pouvez stocker 100 mêmes sessions UTILISATEUR mais elles auront toutes des valeurs différentes en fonction des données que vous fournissez ou des opérations que vous gérez.

En espérant que cela vous aide à comprendre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X