Sessions i ASP.Net?

Tags:    asp.net

Hej,

I det almindelige ASP kunne man bruge sessions. Er dette muligt i ASP.Net eller...?

Har en database med brugere, en log ind form og det er så meningen at brugerne skal kunne logge ind på siden.

Hvordan laver man dette nemmest?

PS. Det skal ligge på et webhotel...

Håber der er nogen der kan hjælpe mig.

Mvh. Jonas
www.midstrup.dk



10 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato

I det almindelige ASP kunne man bruge sessions. Er dette muligt i ASP.Net eller...?


Ja, det er ganske muligt, og de hedder sjovt nok stadigt sessions. Problemet kan måske være syntaksen, som afhænger af hvilket sprog du bruger.


Har en database med brugere, en log ind form og det er så meningen at brugerne skal kunne logge ind på siden.

Hvordan laver man dette nemmest?


Du kan gøre det på samme måde som man ville gøre i "classic" ASP, som det kaldes nu, men med opfindelsen af ASP.NET lavede Microsoft noget som kaldes Forms Authentication som du kan bruge til at autorisere forskellige brugere med. Hvis du har installeret .NET SDK'en på din maskine kan du søge efter det der, og læse videre om det, eller så kan du kigge på http://msdn.microsoft.com/library/ som dog kan være en anelse rodet.

- Brian Hjøllund



Den "pæne" måde er vist at bruge en AuthenticationCookie, have nogen brugergrupper og så tjekke om det nuværende login har rettighederne - en okay gennemgang kan du finde i bogen Essential ASP.NET - og sikkert også mange steder på nettet.

Selv gik jeg i første omgang efter "quick and dirty" ved bare at efterligne det jeg gjorde i PHP. Beder om brugernavn/kodeord, tester mod db, og sætter Session["admin"] til true.

Derefter er der sådan set frit spil hvordan du vil gøre det - evt. have nogen ekstra muligheder komme frem og kun lade dem blive loadet hvis admin er true. Personligt laver jeg pt et lille cms-system og inkluderer derfor bare den tilsvarende side, men med _admin i enden (og kontrollerer selvfølgelig at ingen inkluderinger har admin i enden, når admin ikke er true) ...




I det almindelige ASP kunne man bruge sessions. Er dette muligt i ASP.Net eller...?


Ja, det er ganske muligt, og de hedder sjovt nok stadigt sessions. Problemet kan måske være syntaksen, som afhænger af hvilket sprog du bruger.


Har en database med brugere, en log ind form og det er så meningen at brugerne skal kunne logge ind på siden.

Hvordan laver man dette nemmest?


Du kan gøre det på samme måde som man ville gøre i "classic" ASP, som det kaldes nu, men med opfindelsen af ASP.NET lavede Microsoft noget som kaldes Forms Authentication som du kan bruge til at autorisere forskellige brugere med. Hvis du har installeret .NET SDK'en på din maskine kan du søge efter det der, og læse videre om det, eller så kan du kigge på http://msdn.microsoft.com/library/ som dog kan være en anelse rodet.

- Brian Hjøllund



Jeg ville forsøge at lave det uden at benytte Forms Authentication, da jeg skal lave det til et webhotel hvor jeg ikke kan rode ved indstillingerne i Windows.

Jeg skriver det hele i Visual C#.Net... Hvordan kan man lave det på den gamle måde? (Bare ved at skrive det...)

- Jonas
www.midstrup.dk



Den "pæne" måde er vist at bruge en AuthenticationCookie, have nogen brugergrupper og så tjekke om det nuværende login har rettighederne - en okay gennemgang kan du finde i bogen Essential ASP.NET - og sikkert også mange steder på nettet.

Selv gik jeg i første omgang efter "quick and dirty" ved bare at efterligne det jeg gjorde i PHP. Beder om brugernavn/kodeord, tester mod db, og sætter Session["admin"] til true.

Derefter er der sådan set frit spil hvordan du vil gøre det - evt. have nogen ekstra muligheder komme frem og kun lade dem blive loadet hvis admin er true. Personligt laver jeg pt et lille cms-system og inkluderer derfor bare den tilsvarende side, men med _admin i enden (og kontrollerer selvfølgelig at ingen inkluderinger har admin i enden, når admin ikke er true) ...



Det var sådan noget jeg havde tænkt mig at lave... Har du ikke et kodeeksempel?

- Jonas
www.midstrup.dk



Jeg har et eksempel jeg bruger som virker fint....

Men det skal selvfølgelig have nogle rettelser for at det virker...

Det fungere på den måde det kigger i databasen efter brugernavn og kodeord og ser om de findes i samme tuble...

Hvis de gør det sammenligner den dem med det der er indskrevet i tublen....

efterfølgende opretter den sessions og cookies...

Det er et langt eksempel.. men jeg orker ikke at fin skrive det så det ser lidt mere normalt ud.... håber du kan bruge det

void SubmitLogin(Object s, EventArgs e)
{
OdbcConnection getCounterConn;
getCounterConn = new OdbcConnection(ConnStr);
getCounterConn.Open();

try
{
// Login
string sql;

sql = " SELECT alias, password FROM login"
+ " WHERE alias = " + "'" + feltAlias.Text + "'"
+ " AND password = " + "'" + feltPassword.Text + "'"
;

OdbcCommand getCounterCmd = new OdbcCommand();
getCounterCmd.CommandText = sql;
getCounterCmd.Connection = getCounterConn;

OdbcDataReader getCounterReader = getCounterCmd.ExecuteReader();

LoggedIn=false;

while(getCounterReader.Read())

if(feltAlias.Text == getCounterReader["alias"].ToString() && feltPassword.Text == getCounterReader["password"].ToString()) LoggedIn=true;

if(LoggedIn==true)
{
Session["user"]=feltAlias.Text;
if(saveLogin.Checked == true){

HttpCookie modelTypes= new HttpCookie("user",feltAlias.Text);
HttpCookie modeltype= new HttpCookie("pwd",feltPassword.Text);
Response.AppendCookie(modelTypes);
Response.AppendCookie(modeltype);
DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(500,0,10,0);

modelTypes.Expires = dt.Add(ts);
modeltype.Expires = dt.Add(ts);
}

if (Session["user"].ToString() == "admin")
{
Session["LoggedIn"] = true;
Response.Redirect("default.aspx?m=adminEdit&t=top2");
}
else
{

// henter BookingNr og account Til sessions session = bookingNr og session = account
BookingAccountConn = new OdbcConnection(ConnStr);
BookingAccountConn.Open();

string BookingAccountSQL = "(SELECT model.confirm, model.bookingnr, model.accountID, model.accountTypeID FROM model, login WHERE model.aliasID2 = login.AliasID AND login.Alias ='" + feltAlias.Text +"') UNION (SELECT photograph.confirm, photograph.bookingnr, photograph.accountID, photograph.accountTypeID FROM photograph, login WHERE photograph.aliasID2 = login.AliasID AND login.Alias ='" + feltAlias.Text +"') UNION (SELECT stylistmakeuphair.Confirm, stylistmakeuphair.bookingnr, stylistmakeuphair.accountID, stylistmakeuphair.accountTypeID FROM stylistmakeuphair, login WHERE stylistmakeuphair.aliasID2 = login.AliasID AND login.Alias ='" + feltAlias.Text +"') UNION (SELECT bureauagentcaster.confirm, bureauagentcaster.bookingnr, bureauagentcaster.accountID, bureauagentcaster.accountTypeID FROM bureauagentcaster, login WHERE bureauagentcaster.aliasID2 = login.AliasID AND login.Alias ='" + feltAlias.Text +"') UNION (SELECT photoclubs.Confirm, photoclubs.bookingnr, photoclubs.accountID, photoclubs.accountTypeID FROM photoclubs, login WHERE photoclubs.aliasID2 = login.AliasID AND login.Alias ='" + feltAlias.Text +"')";

OdbcCommand BookingAccountCmd = new OdbcCommand();
BookingAccountCmd.CommandText = BookingAccountSQL;
BookingAccountCmd.Connection = BookingAccountConn;

OdbcDataReader BookingAccountReader = BookingAccountCmd.ExecuteReader();
if(BookingAccountReader.Read()){
try{
if(BookingAccountReader["confirm"].ToString() == "true")
{
Session["error"] = "okaydokay";
Session["bookingNr"]= BookingAccountReader["bookingNr"].ToString();
Session["account"]= BookingAccountReader["accountID"].ToString();
Session["accountType"]= BookingAccountReader["accountTypeID"].ToString();
Session["LoggedIn"] = true;
Response.Redirect("default.aspx?m=profil&t=top2");
}
else
{
Session.Abandon();
Response.Redirect("default.aspx?m=needlogin");
}

//Session["SexID"] = System.Convert.ToInt32(BookingAccountReader["sexid"].ToString());

}
catch(Exception test)
{
Session["error"] = test.ToString();
if(Session["bookingnr"] != null)
Response.Redirect("default.aspx?m=profil&t=top2");
else
Response.Redirect("default.aspx?m=needlogin");

}

}
BookingAccountConn.Close();

// end if model
try{
BookingAccountConn2 = new OdbcConnection(ConnStr);
BookingAccountConn2.Open();

string BookingAccountSQL2 = "(SELECT * from model, login where model.aliasID2 = login.aliasID AND login.Alias ='" + feltAlias.Text +"')";

OdbcCommand BookingAccountCmd2 = new OdbcCommand();
BookingAccountCmd2.CommandText = BookingAccountSQL2;
BookingAccountCmd2.Connection = BookingAccountConn2;

OdbcDataReader BookingAccountReader2 = BookingAccountCmd2.ExecuteReader();
if(BookingAccountReader2.Read()){
Session["SexID"] = System.Convert.ToInt32(BookingAccountReader2["sexid"].ToString());
}
BookingAccountConn.Close();

}catch(Exception Ex){Response.Write(Ex.ToString());Response.Write(Session["SexID"].ToString());}

}//end admin-if
}
else
{
Session["user"]="Ingen";
msg.InnerHtml= "<div class=\\"red\\">Du er ikke logget ind</div>" ;
}

Session["LoggedIn"]=LoggedIn;
Response.Redirect("default.aspx?m=profil&t=top2");
getCounterConn.Close();
}//end try
catch
{
msg.InnerHtml= "<div class=\\"red\\">Du er ikke logget ind</div>" ;
}//end catch



/held og lykke

/Jacob ...

Jeg skal nok lige følge tråden.. sig endeligt til hvis der er noget du ikke forstår



Mange tusinde tak for hjælpen Jakob :) Det var præcis hvad jeg ledte efter...

Har lige to spørgsmål til koden...

Hvordan læser du dine Cookies på andre sider? Jeg kunne finde ud af det i ASP, men har endnu ikke fundet ud af hvordan man gør i ASP.NET...

Jeg faldt over en funktion du brugte med navnet "Timespan"... Hvad gør denne funktion? Det var der i koden hvor du skriver hvor lang "levetid" den Cookie skal have...

Mvh. Jones



Det jeg gør i mit eksemel er når brugeren logger ind opretter den cookies og sessions...

Jeg har så i min page_load for default en lille if sætning der sætter username og password ind i mine 2 webcontrols

Dette ser sådan ud :

if(Request.Cookies["user"]!=null)
{
feltAlias.Text = Request.Cookies["user"].Value;
feltPassword.Attributes.Add("Value", Request.Cookies["pwd"].Value);
}


Lig mærke til du ikke ved <asp:Textbox> med type=Password bare kan sætte id.Text = noget... du skal gøre det på en lidt kringlet måde.. men benyt mit eksempel..

du kan også udfra eksempelt se at man henter fra en cookie med : Request.Cookies["KAGE_NAVN"].Value

her står lidt mere om cookies:

http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemWebHttpCookieMembersTopic.asp

MHT til timespan

Man kan ikke bare oprette en cookie uden at give den en udløbsdato, ellers forsvinder den med det samme, hvilket ikke er ret hensigtsmæssigt..

DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(500,0,10,0);

modelTypes.Expires = dt.Add(ts);
modeltype.Expires = dt.Add(ts);

Først laver jeg en DateTime.Now så opretter jeg en TimeSpan, som repræsentere et tidsinterval... i dette tilfælde 500 dage og 10 minutter :)

http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemTimeSpanClassctorTopic3.asp <- her står lidt mere om timespan


Sig endligt til hvis der er andet !

/Jacob Jensen
MMD'r
www.jj-multimediedesign.dk



Endnu engang mange tusinde tak for hjælpen! :D

Jeg har lige et aller sidste spørgsmål før jeg lukker tråden...
Hvilket Namespace skal være defineret når man bruger Cookies i sin kode?

- Jones



Endnu engang mange tusinde tak for hjælpen! :D

Jeg har lige et aller sidste spørgsmål før jeg lukker tråden...
Hvilket Namespace skal være defineret når man bruger Cookies i sin kode?

- Jones



Den ligger under System.Web.HttpCookie mener jeg


Men du skulle ikke behøves at importere dette... Har du da problemer med de cookies ?


/Jokke



[Redigeret d. 18/05-04 16:41:36 af Jacob Jensen]



Jeg har haft temmeligt mange problemer med Cookies i ASP.Net fordi jeg synes det er meget anderledes (som så meget andet i ASP.Net) i forhold til almindelig ASP, men tror jeg har fundet ud af hvordan man bruger det nu takket være dig. :)

Jeg siger mange tak for denne gang ;)

Mvh. Jonas
www.midstrup.dk



t