Problem mit einer Session --> WICHTIG

aquasonic

Erfahrenes Mitglied
Hallo Jungs,
Sorry, wenn ich schon wieder frage, aber langsam drehe ich durch ;)

Ich möchte doch nur eine Session schreiben, und zwar immer dann wenn ich im QueryString einen Wert übergebe. Dies funktioniert auch (denke ich zumindest), wenn ich jetzt aber die gleiche Seite wieder aufrufe ist die Session wieder weg.

Hier ist mein ganzer Code:

PHP:
namespace DomAdm
{
	using System;
	using System.Data;
	using System.Drawing;
	using System.Web;
	using System.Web.UI.WebControls;
	using System.Web.UI.HtmlControls;

	/// <summary>
	///		Zusammenfassung für __navigation.
	/// </summary>
	public class __navigation : System.Web.UI.UserControl
	{
		protected System.Web.UI.WebControls.Label lblNavigation;

		private void Page_Load(object sender, System.EventArgs e)
		{			
			if (Session["my_url"] == null) { Session["my_url"] = "0"; }
			if (Session["my_suburl"] == null) { Session["my_suburl"] = "0"; }
			
			int my_url = Int32.Parse((string)Session["my_url"]);
			int my_suburl = Int32.Parse((string)Session["my_suburl"]);
			
			int querystring_url = 0;
			int querystring_suburl = 0;
			if (Request.QueryString["my_url"] != null) { querystring_url = Int32.Parse(Request.QueryString["my_url"]); }
			if (Request.QueryString["my_suburl"] != null) { querystring_suburl = Int32.Parse(Request.QueryString["my_suburl"]); }
			
			if (!my_url.Equals(querystring_url) && querystring_url != 0) { 
				Session["my_url"] = querystring_url; 
				my_url = (int)Session["my_url"];
				Session["my_suburl"] = 0; 
				my_suburl = (int)Session["my_suburl"]; 
			}
			if (!my_suburl.Equals(querystring_suburl) && querystring_suburl != 0) { 
				Session["my_suburl"] = querystring_suburl;
				my_suburl = (int)Session["my_suburl"]; 
			}
			
			lblNavigation.Text = Session["my_url"] + " und " + my_suburl;
		}

		#region Vom Web Form-Designer generierter Code
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: Dieser Aufruf ist für den ASP.NET Web Form-Designer erforderlich.
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		///		Erforderliche Methode für die Designerunterstützung
		///		Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
		/// </summary>
		private void InitializeComponent()
		{
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion
	}
}

Woran könnte das liegen? Wenn ich etwas im QueryString übergebe ist der Inhalt von lblNavigation der, den ich übergebe. Übergebe ich dann wieder nichts ist er wieder 0 (was ich eigentlich nicht möchte).

Wisst ihr was ich meine? Über Verbesserungsvorschläge oder andere Lösungen bin ich sehr dankbar und ich bin auch immer offen etwas neues zu lernen. :)

Vielen Dank. Ach ja, und ich verwende C#, falls ihr es noch nicht bemerkt habt :)
 
Mein neuer Code:

PHP:
namespace DomAdm
{
	using System;
	using System.Data;
	using System.Drawing;
	using System.Web;
	using System.Web.UI.WebControls;
	using System.Web.UI.HtmlControls;

	/// <summary>
	///		Zusammenfassung für __navigation.
	/// </summary>
	public class __navigation : System.Web.UI.UserControl
	{
		protected System.Web.UI.WebControls.Label lblNavigation;

		private void Page_Load(object sender, System.EventArgs e)
		{
			
			if (Session["my_url"] == null) {
				lblNavigation.Text += "Session war NULL!<br>";
				Session["my_url"] = "769";
			}
			lblNavigation.Text += "Session ist zu Beginn: " + Session["my_url"]String() + "<br>";
			
			if (Request.QueryString["my_url"] != null) { 
				Session["my_url"] = Int32.Parse(Request.QueryString["my_url"]); 

				lblNavigation.Text += "Session ist neu: " + Session["my_url"]String();
			}
}

		#region Vom Web Form-Designer generierter Code
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: Dieser Aufruf ist für den ASP.NET Web Form-Designer erforderlich.
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		///		Erforderliche Methode für die Designerunterstützung
		///		Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
		/// </summary>
		private void InitializeComponent()
		{
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion
	}
}

Meine Aufgaben beim testen:

1. Seite Starten, Ausgabe ist:
Code:
Session war NULL!
Session ist zu Beginn: 769

2. Seite aktualisieren, Ausgabe ist:
Code:
Session ist zu Beginn: 769

3. QueryString anhängen: default.aspx?my_url=4, Ausgabe ist:
Code:
Session ist zu Beginn: 769
Session ist neu: 4

4. aktuelle Seite aktualisieren, Ausgabe ist:
Code:
Session ist zu Beginn: 4
Session ist neu: 4

5. QueryString wieder wegnehmen: default.aspx, Ausgabe ist:
Code:
Session ist zu Beginn: 769

Bei Aufgabe 5 sollte die Session anstatt 769 --> 4 sein! Bitte helft mit!

Was ihr vielleich noch wissen müsst: das oben gepostete File (navigation.ascx.cs wird included auf der Seite default.aspx
 
Hi,

habe es zwar nicht getestet, aber so müsste es doch funktionieren:

Code:
if (Session["my_url"] != null)
{
	if (Request.QueryString["my_url"] != null)
	{
		lblNavigation.Text = "Session ist zu Beginn: " + Request.QueryString["my_url"]) + "<br>";
		Session["my_url"] = Int32.Parse(Request.QueryString["my_url"]);
		lblNAvigation.Text += "Session ist neu: " + Session["my_url"]String();
	}
	else
	{
		lblNavigation.Text = c			
	}
}
else
{
	Session["my_url"] = "769";
	lblNavigation.Text = "Session war NULL!<br>"
					+ "Session ist zu Beginn: " + Session["my_url"] = "769";
			
}


Mfg,
Alex
 
Das ergibt leider das genau gleiche Resultat...Wenn ich dann nichts mehr übergebe im QueryString ist in der Session wieder 769...:-(
 
So, habs jetzt auch ausprobiert.

Code:
string txt = "";
if (Session["my_url"] != null)
{
	if (Request.QueryString["my_url"] != null)
	{
		txt = "Session ist zu Beginn: " + Session["my_url"] + "<br>";
		Session["my_url"] = Int32.Parse(Request.QueryString["my_url"]);
		txt += "Session ist neu: " + Session["my_url"]String();
	}
	else
	{
		txt = "Session ist zu Beginn: " + 	Session["my_url"];	
	}
}
else
{
	Session["my_url"] = "769";
	txt = "Session war NULL!<br>"
		+ "Session ist zu Beginn: " + Session["my_url"];
			
}

Response.Write(txt);

Dieser Code funktioniert bei mir, so wie du es willst.
Das beim Ersten Aufruf, die Variable gesetzt wird, und eine Meldung ausgegeben wird, das die Session null war.
Danach kann mit dem QueryString die Variable gesetzt werden, und wenn der QueryString weggelassen wird, ist die Session noch immer am zuletzt übergebenen Wert.

Wegen dem Code-Snippet von vorher, hab da ein bisserl gestresst, deswegen sind auch einige Fehler drinnen.

Mfg,
Alex
 
Wegen dem Code-Snippet von vorher, hab da ein bisserl gestresst, deswegen sind auch einige Fehler drinnen.

Ich konnte ja die kleinen Fehler noch selber korrigieren.

Aber leider funktioniert bei mir auch dieses Listening nicht. Gibt es irgendwelche Einstellungen welche ich in der Global.asax oder in der Web.config machen muss?Muss ich noch welche Klassen implementieren? Bei mir ist alles Standard eingestellt. Ich benütze das Frameword 1.1...Ist das das Problem

Oder könnte es darin liegen dass mein File ein *.ascx File ist und nur auf der *.aspx includet wird

Edit: --> Habe es noch in einem neuen Projekt probiert, direkt im aspx File in der Page_Load() Methode, funktioniert auch nicht...:(

Vielen Dank schon mal für deine guten Antoworten. :)
 
Zuletzt bearbeitet:
Also, ich habs jetzt nochmal probiert.

Habe auch ein UserControl, und eine Seite in der es eingebettet ist.
Auf 2 Arten probierte ich es, einmal das Control mittels LoadControl zu laden, und der ControlSammlung der Seite hinzuzufügen, und einmal direkt eingebettet mittels CustomTag.

Und so sahen die Versuche aus:

loadcontrol:

#1 test.aspx
Session war NULL!
Session ist zu Beginn: 769

#2 test.aspx reload
Session ist zu Beginn: 769

#3 test.aspx?my_url=4
Session ist zu Beginn: 769
Session ist neu: 4

#4 test.aspx?my_url=4 reload
Session ist zu Beginn: 4
Session ist neu: 4

#5 test.aspx
Session ist zu Beginn: 4

------------------------

CustomTag

#1 test.aspx
Session war NULL!
Session ist zu Beginn: 769

#2 test.aspx reload
Session ist zu Beginn: 769

#3 test.aspx?my_url=5
Session ist zu Beginn: 769
Session ist neu: 5

#4 test.aspx?my_url=5 reload
Session ist zu Beginn: 5
Session ist neu: 5

#5 test.aspx
Session ist zu Beginn: 5

Sprich, bei mir funktioniert es.
 
Das glaube ich Dir gerne :)

Nur leider bei mir nicht...Hast du eine Ahnung wieso nicht? Irgend eine Einstellung nicht gut? Ich drehe noch durch :(

Hast mal was bei mir gut, wenn du mal Fragen PHP oder so hast :)
 
Zurück