2011-03-18 4 views
2

Quelqu'un peut-il m'apprendre comment utiliser les sessions? J'ai une page de connexion qui fait référence à la table mysql db nommée User qui inclut UserID = "numéro de variable", nom d'utilisateur et mot de passe. Je souhaite pouvoir stocker l'ID utilisateur dans une session afin que je puisse l'appeler dans le profil de l'utilisateur lorsqu'il se connecte.enseignement sur les sessions?

Comment cela est-il fait? Tout codage et placement pertinents d'un codage spécifique serait utile, car je ne le prends tout simplement pas du tout. Est-ce qu'il va dans le code derrière (fichier .cs) ou est-il détenu dans le html de la page aspx? ou les deux et comment? Comment le travail de la session sur plusieurs pages intérieures (une fois connecté, vous pouvez broswe plus d'une page en rapport avec votre propre profil)

using System.Data.Odbc; 
    partial class login : System.Web.UI.Page 
    {   
    protected void Login1_Authenticate(object sender, System.Web.UI.WebControls.AuthenticateEventArgs e)  
    {   
    OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=mydb; User=root;Password=;");   
cn.Open(); 
     OdbcCommand cmd = new OdbcCommand("Select * from login where username=? and password=?", cn);   
    //Add parameters to get the username and password    
    cmd.Parameters.Add("@username", OdbcType.VarChar); 
     cmd.Parameters["@username"].Value = this.Login1.UserName; 

     cmd.Parameters.Add("@password", OdbcType.VarChar); 
     cmd.Parameters["@password"].Value = this.Login1.Password; 

     OdbcDataReader dr = default(OdbcDataReader);   
// Initialise a reader to read the rows from the login table. 

    // If row exists, the login is successful   
    dr = cmd.ExecuteReader();   
    if (dr.HasRows) 
{    
e.Authenticated = true;    
// Event Authenticate is true  
    }  
    } 
} 
+0

Gardez à l'esprit que la collection de sessions est volatile et que votre valeur UserID peut être supprimée au milieu de la session. Vous devez toujours fournir une solution de repli pour repeupler les valeurs dans le cas où elles sont supprimées. – detaylor

+0

comment? Quelles autres options suggéreriez-vous si les séances sont aussi volatiles? –

+1

if (Session ["UserID"] == null) ... puis recherche à nouveau l'ID – DOK

Répondre

5

En C#, pour stocker une variable dans une variable de session:

Session["usrID"]="myUserName"; 

plus tard, pour récupérer la variable de session:

string usrName = Convert.ToString(Session["usrID"]); 
+0

omg ça ne peut pas être aussi simple que ça? Mais bien que l'utilisateur se connecte tout ce qu'il saisit est son nom d'utilisateur et son mot de passe, la partie userid de la table mysql n'est pas refrénée? Je vais modifier mon message et inclure le code de connexion (son contrôle de connexion asp a été modifié pour fonctionner à partir de mysql) –

+0

Vous ne récupérez pas le UserID de la connexion SELECT * FROM? – DOK

3

http://msdn.microsoft.com/en-us/library/ms178581.aspx

Fondamentalement, offrez-vous une propriété pour chaque variable dans la page classe, par exemple.

private int SelectedYear 
{ 
    get 
    { 
     object obj = Session["SelectedYear"]; 
     if (obj != null) 
     { 
      return int.Parse(obj.ToString()); 
     } 
     else 
     { 
      return 0; 
     } 
    } 
    set { Session["SelectedYear"] = value; } 
} 
1

si vous avez besoin pour la gestion des utilisateurs, vous devrait aller avec un memberhipprovider. http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx

pour obtenir UserInformation vous pouvez utiliser

Membership.GetUser() 

si vous voulez juste utiliser des sessions pour stocker des variables, vous pouvez facilement utiliser

Session["name"] = value; 
var value = Session["name"]; 

comme d'autres mentionend déjà

1

Quand faut-il vous appelez le code pour définir la valeur de la variable de session?

Vous pouvez le faire dans la méthode Login_Authenticate. C'est là que vous avez récupéré l'ID pour la première fois. Ou, vous pouvez le faire dans le fichier Global.asax, dans l'événement Session_Start

Ensuite, vous aurez toujours la valeur disponible sur chaque page.