Avatar billede y-nose Nybegynder
01. marts 2006 - 12:18 Der er 41 kommentarer

Session bliver null når jeg rediredter

Hej jeg har et lille men meget ireterne problem med en session.

problemet i korte træk når jeg redirescer fra en side til en anden bliver min session sat til Null.

default.aspx
sætter Session["login"] = "all";
Redirect til dall.aspx;

dall.aspx    // her skulle den jo så gerne hoppe ind i if men den hopper else.
if (Session["login"] == "all") {
    Response.Write("hejmed dig");
}
else {
    Response.Redirect() tilbage til default.aspx
}


jeg har prøvet at skrive min session["login"] ud i stedet for Redirect til dall.aspx og der skriver den at den er lig med "all" altså det der skulle stå.
jeg har også prøvet at skrive den ud når jeg er blevet sendt tilbage til default.aspx og der er den null.

plz hjælp hele koden for de 2 sider følger her under

på forhånd tak

=== default.aspx Start ============================================================

<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Collections" %>
<%@ import Namespace="System.ComponentModel" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Web" %>
<%@ import Namespace="System.Web.SessionState" %>
<%@ import Namespace="System.Web.UI" %>
<%@ import Namespace="System.Web.UI.WebControls" %>
<%@ import Namespace="System.Web.UI.HtmlControls" %>
<script runat="server">

        // === page load ===
        void Page_Load(object sender, EventArgs e) {
   
           
            if (Session["login"] == null)
            {
            Session["login"] = "";
            }
           
   
            /*
            fejl.1 feltet brugernavn er ikke udfyldt
            fejl.2 feltet adgangskode er ikke udfyldt
            fejl.3 access expired
            fejl.4 access denied
            fejl.5 brugeren prøver at komme ind på en side hvor han ikke har adgang
            */
            if (Request.QueryString["fejl"] == "1") {
                Response.Write("<br>");
                lbl_fejl.Text = "Feltet brugernavn er ikke udfyldt";
                Response.Write("<br>");
            }
            else if (Request.QueryString["fejl"] == "2") {
                Response.Write("<br>");
                lbl_fejl.Text = "Feltet adgangskode er ikke udfyldt";
                Response.Write("<br>");
            }
            else if (Request.QueryString["fejl"] == "3") {
                Response.Write("<br>");
                lbl_fejl.Text = "Det er nu 14 dage siden du fik tilsendt brugernavn og adgangskode og du har ikke længer adgang til . kontakt evt.  for at forlænge perioden. ";
                Response.Write("<br>");
            }
            else if (Request.QueryString["fejl"] == "4") {
                Response.Write("<br>");
                lbl_fejl.Text = "Forkert brugernavn og eller adgangskode prøv igen.";
                Response.Write("<br>");
            }
            else if (Request.QueryString["fejl"] == "5") {
                Response.Write("<br>");
                lbl_fejl.Text = "Du har ikke adgang til denneside.";
                Response.Write("<br>");
                Response.Write("session[login]: "+Session["login"]+"<br>");
            }
            else {
                lbl_fejl.Text = "";
            }
        }
        // =================
   
   
        void btn_Login_Click(object sender, EventArgs e) {
            // variabler
   
            string str_attempt_username = "";
            string str_attempt_password = "";
            int int_user_ID = -1;
            string str_username = "";
            string str_password = "";
            DateTime date_created = new DateTime();
            DateTime date_startdate = new DateTime();
            DateTime date_enddate = new DateTime();
            string str_access_to = "";
            int int_antal_logins = -1;
            int int_antal_adgang = -1;
   
            string str_login = ""; //bruges til at fortælle hvor en bruger skal redirectes hen
   
            // set variabler
            if ((Request.Form["username"] == null) || (Request.Form["username"] == "")) {
                // fejl et feltet username er ikke udfyldt.
                Response.Redirect("default.aspx?fejl=1");
            }
            else if ((Request.Form["password"] == null) || (Request.Form["password"] == "")) {
                // fejl et feltet password er ikke udfyldt.
                Response.Redirect("default.aspx?fejl=2");
            }
            else {
                str_attempt_username = Request.Form["username"];
                str_attempt_password = Request.Form["password"];
            }
   
            //Forbindelse til MS Access DB
            string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("db/db_skab_adgang.mdb");
            OleDbConnection objConn = new OleDbConnection(strCon);
   
            //Åben forbindelse til DB
            objConn.Open();
   
            //Byg SQL streng og kald til DB
            string strSQL = "SELECT * FROM [user] Where username='"+str_attempt_username+"' AND password='"+str_attempt_password+"'";
            OleDbCommand objCmd = new OleDbCommand(strSQL,objConn);
   
            //Opret DataReader og bind data til den
            OleDbDataReader objDR;
            objDR = objCmd.ExecuteReader();
   
            if (objDR.HasRows) {
                while (objDR.Read()) {
                    int_user_ID = (int)objDR["user_ID"];
                    str_username = objDR["username"].ToString();
                    str_password = objDR["password"].ToString();
                    date_created = (DateTime)objDR["created"];
                    date_startdate = (DateTime)objDR["startdate"];
                    date_enddate = (DateTime)objDR["enddate"];
                    str_access_to = objDR["access_to"].ToString();
                    int_antal_logins = (int)objDR["antal_logins"];
                    int_antal_adgang = (int)objDR["antal_adgang"];
   
                    // date_enddate.Equals("date_now")
                    if (date_enddate >= DateTime.Now) {
                        int_antal_logins = int_antal_logins +1;
                        string strSQL2 = "UPDATE [user] Set antal_logins="+int_antal_logins+" WHERE user_ID="+int_user_ID+"";
                        OleDbCommand objCmd2 = new OleDbCommand(strSQL2, objConn);
                        objCmd2.ExecuteNonQuery();
                        Session["login"] = "" +str_access_to+ "";
                        str_login = "" +str_access_to+ "";
                        //str_login = "123";  // test
                    }
                    else {
                        Session["login"] = "access_expired";
                        str_login = "3";    // fejl.3 access_expired
                        //str_login = "123";  // test
                    }
                }
            }
            else {
                Session["login"] = "access_denied";
                str_login = "4";    // fejl.4 access_denied
            }
       
            //Luk forbindelse til DB
            objConn.Close();
   
            string str_session_login = (string)Session["login"];
   
            if (str_login == "start") {
                Response.Redirect("dstart.aspx");
            }
            else if (str_login == "shop") {
                Response.Redirect("dshop.aspx");
            }
            else if (str_login == "customize") {
                Response.Redirect("dcustomize.aspx");
            }
            else if (str_login == "all") {  // kan kodt få den til at redirecte med str_session_login == "all"
                Response.Redirect("dall.aspx");
            }
            else if (str_login == "123") {  // test
   
                Response.Write("user_ID: "+int_user_ID+"<br>");
                Response.Write("username: "+str_username+"<br>");
                Response.Write("password: "+str_password+"<br>");
                Response.Write("created: "+date_created+"<br>");
                Response.Write("startdate: "+date_startdate+"<br>");
                Response.Write("enddate: "+date_enddate+"<br>");
                Response.Write("access_to: "+str_access_to+"<br>");
                Response.Write("antal_logins: "+int_antal_logins+"<br>");
                Response.Write("antal_adgang: "+int_antal_adgang+"<br>");
                Response.Write("datetime.now: "+DateTime.Now+"<br>");
                Response.Write("session[login]: "+Session["login"]+"<br>");
            }
            else {
                Response.Redirect("default.aspx?fejl="+str_login+"");
            }
        }

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <p>
            Login til  designs<br />
            <asp:Label id="lbl_fejl" runat="server" text=""></asp:Label>
            <br />
            Brugernavn:<br />
            <input type="text" name="username" />
            <br />
            Adgangskode:<br />
            <input type="password" name="password" />
            <br />
            <br />
            <asp:Button id="btn_Login" onclick="btn_Login_Click" runat="server" Text="Login"></asp:Button>
        </p>
        <!-- Insert content here -->
    </form>
</body>
</html>


=== default.aspx END ============================================================



=== dall.aspx Start ============================================================

<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Collections" %>
<%@ import Namespace="System.ComponentModel" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Web" %>
<%@ import Namespace="System.Web.SessionState" %>
<%@ import Namespace="System.Web.UI" %>
<%@ import Namespace="System.Web.UI.WebControls" %>
<%@ import Namespace="System.Web.UI.HtmlControls" %>
<script runat="server">

    // Insert page code here
    // === page load ===
        void Page_Load(object sender, EventArgs e) {
   
            string str_session_login = (string)Session["login"];
            if (str_session_login == "all") {
   
                Response.Write("hej med dig");
            }
            else {
                Response.Redirect("default.aspx?fejl=5");
            }
        }
        // =================
    //

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <!-- Insert content here -->
    </form>
</body>
</html>


=== dall.aspx End ============================================================
Avatar billede kalp Novice
01. marts 2006 - 12:21 #1
if (Session["login"] = "all") {

eller prøv noget i stil med

if (Session["login"].equals("all")) {

altså et metodekald.. jeg ved ikke om equals findes, men du kan prøve at se hvilke metoder der er
Avatar billede kalp Novice
01. marts 2006 - 12:22 #2
ser ud til at den findes... if (Session["login"].Equals("all")) {

men med stort.. jeg kan forestille mig at din session virker fint, men bare den måde du sammenligner på der kikser..

læs evt.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconComparingStrings.asp
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 12:23 #3
prøv lige med:

void Page_Load(object sender, EventArgs e) {
 
            string str_session_login = (string)Session["login"];
Response.Write(str_session_login);
            if (str_session_login == "all") {
 
                Response.Write("hej med dig");
            }
         
        }
Avatar billede y-nose Nybegynder
01. marts 2006 - 12:31 #4
jeg har prøvet (string) og .ToString og alt hvad jeg har fundet på har givet samme resultat.
men jeg vil lige prøve med den der equals
Avatar billede y-nose Nybegynder
01. marts 2006 - 12:35 #5
jeg får følgene fejl med equals

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 18:
Line 19:            //string str_session_login = (string)Session["login"];
Line 20:            if (Session["login"].Equals("all"))  {
Line 21:
Line 22:                Response.Write("hej med dig");


Source File: d:\www2\00982031\http\online\test\login_test\dall.aspx    Line: 20
Avatar billede kalp Novice
01. marts 2006 - 12:36 #6
if ((String)Session["login"].Equals("all"))  {

virker det ikke må jeg overlade det til dr_chaos.

en session burde i hvertfald ikke forsvinde pga. sideskift
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 12:45 #7
prøv med
void Page_Load(object sender, EventArgs e) {

            string str_session_login = (string)Session["login"];
Response.Write(str_session_login+" test");
            if (str_session_login == "all") {

                Response.Write("hej med dig");
            }
       
        }
Det er for at sikre sig at login bliver sat til en værdi
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 12:45 #8
lader til at den ikke gør
Avatar billede y-nose Nybegynder
01. marts 2006 - 12:46 #9
jeg skrev denne sætning i stede gør det nemmere at se hvad der er i session med de to hej er syntes jeg.
Response.Write("hej: " +str_session_login+ " :hej");
dr_chaos

og fik dette svar ud
hej: :hej

altså "" eller Null ganske som forvented. deg ikke det jeg gerne ville have
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 13:10 #10
det tyder på at der ikke bliver sat nogen værdi ind i sessionen.

prøv lige med
else if (str_login == "all") { 
               
Response.Write("hej: " +Session["login"].ToString()+ " :hej");
//Response.Redirect("dall.aspx");
            }
Avatar billede y-nose Nybegynder
01. marts 2006 - 13:27 #11
så kommer dette ud

hej: all :hej

jeg har også testede dete før.

og det er lige precis det jeg ikke fatter.
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 13:42 #12
du sætter ikke Session["login"] andre steder ?
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 13:44 #13
eller disposer sessioner i f.eks. global.asax.
I den browser er session cookies tilladt ?
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 13:53 #14
jeg har lavet en simpel test:
        protected void test(object sender, EventArgs e)
        {
            Session["login"] = "all";
            string str_login = (string)Session["login"];

            if (str_login == "start")
            {
                Response.Redirect("default.aspx");
            }
            else if (str_login == "shop")
            {
                Response.Redirect("default.aspx");
            }
            else if (str_login == "customize")
            {
                Response.Redirect("default.aspx");
            }
            else if (str_login == "all")
            {  // kan kodt få den til at redirecte med str_session_login == "all"
                Response.Redirect("default.aspx");
            }
        }
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 13:54 #15
den virker.
Når man trykker på en knap.
Avatar billede y-nose Nybegynder
01. marts 2006 - 13:54 #16
al min kode står højere oppe.

starten af page load gør entlig ikke noget har prøvet at fjerne den men det skete der ikke noget ved.

if (Session["login"] == null)
            {
            Session["login"] = "";
            }

dette er når jeg har trykket på en knap

if (objDR.HasRows) {
                while (objDR.Read()) {
                    int_user_ID = (int)objDR["user_ID"];
                    str_username = objDR["username"].ToString();
                    str_password = objDR["password"].ToString();
                    date_created = (DateTime)objDR["created"];
                    date_startdate = (DateTime)objDR["startdate"];
                    date_enddate = (DateTime)objDR["enddate"];
                    str_access_to = objDR["access_to"].ToString();
                    int_antal_logins = (int)objDR["antal_logins"];
                    int_antal_adgang = (int)objDR["antal_adgang"];
   
                    // date_enddate.Equals("date_now")
                    if (date_enddate >= DateTime.Now) {
                        int_antal_logins = int_antal_logins +1;
                        string strSQL2 = "UPDATE [user] Set antal_logins="+int_antal_logins+" WHERE user_ID="+int_user_ID+"";
                        OleDbCommand objCmd2 = new OleDbCommand(strSQL2, objConn);
                        objCmd2.ExecuteNonQuery();
                        Session["login"] = "" +str_access_to+ "";    // info fra databassen
                        str_login = "" +str_access_to+ "";
                        //str_login = "123";  // test
                    }
                    else {
                        Session["login"] = "access_expired";
                        str_login = "3";    // fejl.3 access_expired
                        //str_login = "123";  // test
                    }
                }
            }
            else {
                Session["login"] = "access_denied";
                str_login = "4";    // fejl.4 access_denied
            }

dette er de steder hvor jeg sætter min session.


global.asax.????

jeg har kun de to sider default.aspx og dall.aspx
og jeg disposer ikke session på nogle af dem.
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 13:54 #17
bruger
string str_session_login = (string)Session["login"];
        if (str_session_login == "all")
        {
            Response.Write("hej med dig");
        }
på min default.aspx
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 13:55 #18
ok kan du bruge sessioner på andre sider ?
Avatar billede y-nose Nybegynder
01. marts 2006 - 14:00 #19
jeg kan også godt få den til at redirecte med str_session_login == "all"

det jeg ikke fatte er at når jeg så kommer over på siden dall.aspx er min session lige pludselig null.
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 14:00 #20
prøv at test med den funktion  jeg lavede :
  protected void test(object sender, EventArgs e)
        {
            Session["login"] = "all";
            string str_login = (string)Session["login"];

            if (str_login == "start")
            {
                Response.Redirect("default.aspx");
            }
            else if (str_login == "shop")
            {
                Response.Redirect("default.aspx");
            }
            else if (str_login == "customize")
            {
                Response.Redirect("default.aspx");
            }
            else if (str_login == "all")
            {  // kan kodt få den til at redirecte med str_session_login == "all"
                Response.Redirect("default.aspx");
            }
        }
Avatar billede y-nose Nybegynder
01. marts 2006 - 14:01 #21
har jeg ikke tjekket men det kan jeg jo lige gøre.
Avatar billede y-nose Nybegynder
01. marts 2006 - 14:19 #22
her er så mit lille eksempel

<%@ Page Language="C#" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Collections" %>
<%@ import Namespace="System.ComponentModel" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Web" %>
<%@ import Namespace="System.Web.SessionState" %>
<%@ import Namespace="System.Web.UI" %>
<%@ import Namespace="System.Web.UI.WebControls" %>
<%@ import Namespace="System.Web.UI.HtmlControls" %>
<script runat="server">

    // Insert page code here
    //
   

    void Button1_Click(object sender, EventArgs e) {
    Session["login"] = "all";
    Response.Redirect("test.aspx");
    }

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <asp:Button id="Button1" onclick="Button1_Click" runat="server" Text="Button"></asp:Button>
        <!-- Insert content here -->
    </form>
</body>
</html>


<%@ Page Language="C#" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Collections" %>
<%@ import Namespace="System.ComponentModel" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Web" %>
<%@ import Namespace="System.Web.SessionState" %>
<%@ import Namespace="System.Web.UI" %>
<%@ import Namespace="System.Web.UI.WebControls" %>
<%@ import Namespace="System.Web.UI.HtmlControls" %>
<script runat="server">

    // Insert page code here
    void Page_Load(object sender, EventArgs e) {
    if (Session["login"] == "all") {
        Response.Write("hurra det virker");
    }
    else {
        Response.Write("øv");
    }
    }
    //

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <!-- Insert content here -->
    </form>
</body>
</html>


og den kommer også ud og siger øv.
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 14:29 #23
prøv lige at følge disse step her:
1) Open IIS Manager
2) Right-click default web site / your web site
3) Open properties
4) Open home directory tab.
5) You can see a configuration button at the bottom near application name.
6) click configuration button
7) OPen app options (iis 5.0) / options (iis 6.0) tab.
8) check enable session check checkbox.
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 14:29 #24
tror ikke problemet ligger i din kode men i IIS settings
Avatar billede y-nose Nybegynder
01. marts 2006 - 14:34 #25
kan du have ret i.

jeg bruger webmatrix og har lige tested ved brug af dens webservee og det virker der.

nu ligger mit problem at det jo skal ud og ligge på en webhotel så må jeg jo bare ud og have fat i dem.


jeg takker for hjælpen og tiden
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 14:36 #26
ligger du projektet i roden af webstedet ?
Avatar billede y-nose Nybegynder
01. marts 2006 - 14:44 #27
nop i en undermappe
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 14:45 #28
prøv lige at ligge det i roden
Avatar billede y-nose Nybegynder
01. marts 2006 - 15:07 #29
øv øv det havde de sat til.

meget mærkeligt

de har heller ikke haft andre med lignene probleme før.


så hvis du har andre forslag så lutter jeg øre for jeg er helt blank.
Avatar billede y-nose Nybegynder
01. marts 2006 - 15:07 #30
ok
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 15:08 #31
prøv at ligge din hjemmeside i roden af webstedet.
Altså den lille test du har lavet.
Avatar billede y-nose Nybegynder
01. marts 2006 - 15:14 #32
nu har jeg prøvet at ligge det simple exempel i roden på webhotellet uden held.
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 15:17 #33
hvilken version af asp.net bruger du ?
Avatar billede y-nose Nybegynder
01. marts 2006 - 15:19 #34
det skulle gerne være 2.0
Avatar billede y-nose Nybegynder
01. marts 2006 - 15:22 #35
er dog ikke helt sikker jeg koder bare
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 15:25 #36
understøtter din webudbyder asp.net 2.0 ?
Avatar billede y-nose Nybegynder
01. marts 2006 - 15:27 #37
hvordan finder jeg ud af hvilken version af asp.net jeg benytter?
Avatar billede y-nose Nybegynder
01. marts 2006 - 15:28 #38
ja
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 15:29 #39
hvis du bruger webmatrix er det formodentlig 1.1
hvis du bruger visual web developer er det 2.0
Avatar billede y-nose Nybegynder
01. marts 2006 - 15:31 #40
ja så er det formentlig 1.1 da jeg bruger web matrix

har det nogen betydning da web serveren køre 2.0
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 15:34 #41
webserveren bør også kunne klare 1.1
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester