"We are back" « oc.at

Session variablen in links (HTML)

aNtraXx 17.11.2003 - 09:47 724 8
Posts

aNtraXx

trailer park king
Avatar
Registered: Apr 2002
Location: Linz
Posts: 6907
also wie man an de source unschwer erkennt arbeite ich mit session variablen und möchte gerne ein logout machen (cookie löschen). jedoch funktioniert das ganze nicht. es nimmt mir das _SESSION nicht an. habs auch schon mit ein paar anderen sachen probiert, habs aber nur einmal mit "normalen" variablen zum laufeb gebracht. jetzt geht allerdings auch das nicht mehr. php.ini und dergleichen sind unverändert geblieben.

kann mir da vielleicht jemand weiterhelfen?
tia bernhard

Code: PHP
<?  session_start(); 
	
		if(isset($_SESSION['logout']))
		{
			
			   setcookie("Elanium","",time()-3600); //Zum Löschen wird eine vergangene Zeit angegeben

			   ?>						
					<script type="text/javascript">
						window.open("loggin.php","_self");
					</script>
			   <?
		}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Logged In </TITLE>

<link rel="stylesheet" type="text/css" href="styles\style.css"> <!-- Stylesheet einfügen -->

<STYLE type="text/css">

	body
	{
		background-color: #000000;
		font-weight: normal;
	}

</STYLE>

</HEAD>

<BODY>

			Logged in as: <br>
			<b><?echo $_SESSION['Benutzername'];?></b>	
			<br>
			<br>
			<br>
			<br>
			<br>
			<a href="logged_in.php?_SESSION['logout']=true">logout</a>
			
</BODY>
</HTML>

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
nach dem es nur ein ausschnitt ist, hier ein paar allgemeinte anmerkungen:

a) du mußt cookies genauso löschen wie du sie gesetzt hast (also zb mit dem selben pfad, und dem selben namen "Elanium")

b) du kannst _SESSION nicht einfach so mit dem GET-parameter überschreiben.. übergib doch ein logged_in.php?logout=true und prüfe dann auf $_GET[logout]

c) unklar ist, warum du cookies und sessions zusammen verwendest.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
aaaja, und das is natürlich html :bash:

eine session wird mittels session_destroy() beendet - anders is es nicht möglich.
Wenn du nur eine Sessionvariable löschen willst -> unset(bla).

Wenn du sessions nicht abcheckst und deswegen _irgendwas_ schreibst, solltest du mal das handbuch durchlesen.

aNtraXx

trailer park king
Avatar
Registered: Apr 2002
Location: Linz
Posts: 6907
cookie wird verwendet damit der user beim refresh bzw neuem seitenaufruf nicht ausgelogt wird.

sessions werden verwendet damit das ganze auch funktioniert wenn register_globals in der php.ini auf off sind.

daher bringts ja erst wieder nix wenn ich mit normalen variablen wie $logout benutze.

meiner ansicht nach ist <a href> in HTML also was ist daran bitte falsch? das Sessions PHP sind ist doch eh klar

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
du konstruierst da irgendwas, das in der form gar nicht notwendig ist.

a) was ist so schlimm, wenn ein ausgeloggter user, sich beim refresh nochmal auslogged ?

b) löst man die refresh-probleme für gewöhnlich über eine zwischenseite mit einem HTTP-Redirect: zb header("Location: otherpage.php");

c) $_GET $_POST $_COOKIES $_SESSION funktionieren unabhängig ob register globals gesetzt ist oder nicht. wir haben nicht gesagt, daß du $logout verwenden sollst.

aNtraXx

trailer park king
Avatar
Registered: Apr 2002
Location: Linz
Posts: 6907
achso... dann hab ich eine falsche info von woanders bekommen.

dann sind die sessions also eh nur dazu gut dass sie auf jedem php.file zugänglich sind.

gibts fü das HTTP-Redirect ein HowTo ?

das problem liegt ja darin das ein eingeloggter user ausgeloggt wird

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
da ist eher was an deinem pagekonzept faul, oder du implementierst die falschen dinge in falschen seiten... warum zeigst du dem _eingeloggten_ user eine seite die beim realoaden eine abmeldung durchführt?

der logout link, sollte zu einem script führen das abcheckt, daß dieser logout-link gedrückt wurde (zb mit ?logout=1) und den neuen _zustand_ im session-objekt vermerken (bzw die session zerstören)

zusammenfassung: in der regel gilt:
- _Befehle_ über POST und GET schicken.
- _Zustände_ in der session merken.

PS: eine andere form für redirect führst du ja bereits aus: mit javascript.
PPS: schon mal darüber nachgedacht, einen link zu login.php?logout=true zu machen, und login.php die session zerstören lassen?
Bearbeitet von atrox am 17.11.2003, 12:53

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
antraxx, ich ahne was du denkst...

du denkst, dass eine session automatisch nach einem F5 oder anderem reload beendet wird -> falsch, sessions bleiben so lange erhalten wie der browser offen ist.
(bzw. eine serverabhängige maximale zeit der inaktivität)


btw: sessions haben mit html genau garnix zu tun.

aNtraXx

trailer park king
Avatar
Registered: Apr 2002
Location: Linz
Posts: 6907
so hab mir mal eure vorschläge zu herzen genommen. zb das login.php das cookie zerstört ist schon mal eine sehr gute idee.
trotzdem funktioniert es nicht.. keinen plan warum. es sieht wie folgt aus:


logged_in.php:

Code: PHP
<a href="Login.php?logout=1">logout</a>

bzw.
Code: PHP
<script type="text/javascript">
		function logout()
		{
			var aufruf;
			alert('MUH');
			aufruf = ("Login.php?logout=1");
			parent.frame_left_top.location.href=aufruf; 
		}
</script>

<a href="javascript:logout()">logout</a>

und im login.php
Code: PHP
/*-- LOGOUT bzw. Cookie zerstören -----------------------------*/
	if($_GET[logout])//isset($logout)
		{
					setcookie("Elanium","",time()-3600);
		}
/*-------------------------------------------------------------*/

--> edit: so nun gehts. hab im nachhinein unset($_COOKIE['Elanium']) hinzugefügt und nun geths.
Bearbeitet von aNtraXx am 20.11.2003, 09:01
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz