sessions auf dem host Rechner als cookie speichern

zarrandreas

Mitglied
Also ich habe gerade an einer Methode gearbeitet wie ich die sessions auf dem host Rechner speichern kann.

Ich habe dann eine Funktion für das Speichern geschrieben

/*
* serialisiert session in der cookie
*/
function save_session_in_to_cookie($lifetime=3600){
global $interval;
$start=0;
$info = session_encode();
while($start<strlen($info)){//while
$cookie_var=substr($info,$start,$interval);
setcookie("info".$start, $cookie_var ,Time()+$lifetime);
//setcookie("test", "WW" ,Time()+$lifetime);
//echo $cookie_var."<br>\n";
$start+=$interval;
if($start>strlen($info)){
$interval=strlen($info)-$start+$interval;
}
}//while
}

und eine für das Wiederherstellen

/*
* reserialisier session from cookie
*/
function get_session_from_cookie(){
global $interval,$_COOKIE;
$start=0;
$info="";
$i=0;
while($_COOKIE["info".$start]){//while
$info.=$_COOKIE["info".$start];
echo $start." ".$_COOKIE["info".$start]."<br>";
$start+=$interval;
}//while
echo $info."<br>";
session_decode($info);
global $user_info;
echo $user_info->nick;
}



Mein Problem ist:
Ich verstehe nicht wieso wenn ich die Variable aus dem Array .$_COOKIE hohle, diese dann entstellt wird.

So sieht z.B. Die gesetzte Cookie Variable(habe geprüft unter Mozilla FireFox)

user_info%7CO%3A9%3A%22user_info%22%3A15%3A%7Bs%3A6%3A%22height%22%3Bs%3A3%3A%22864%22%3Bs%3A5%3A%22width%22%3Bs%3A4%3A%221152%22%3Bs%3A4%3A%22nick%22%3Bs%3A4%3A%22zarr%22%3Bs%3A

Und so sieht die gleiche Variable, wenn ich diese aus dem .$_COOKIE hohle

user_info|O:9:\"user_info\":15:{s:6:\"height\";s:3:\"864\";s:5:\"width\";s:4:\"1152\";s:4:\"nick\";s:4:\"zarr\";s:

falls Jemand Bescheid weiß und weiter helfen kann, dann nur zu.
Übrigens das ist die Seite an der ich arbeite http://www.hardworker
 
Zum einen nutzen Sessions in der Regel sowieso Cookies, darum versteh ich nicht ganz was Du vor hast.
Falls Du ein permanentes Login haben willst kannst Du das meiner Meinung nach auch einfacher haben.
 
Ich versuche die session als Cookie beim host zu speichern und beim nächstem Besuch diese Information in die Session laden.
deswegen benutze ich auch

session_encode();
session_decode($info);
davor nutzte ich

session_set_cookie_params(3600*240);//10 Tage
session_start();

doch auf dem Server wo meine Webseite liegt funktioniert das nicht. Cookie wird gleich nach dem Schliessen des Browsers gelöscht (Bei mir auf dem Desktop Rechner ging das einmal frei).

villeicht liegt es an deren Konfiguration

http://www.inf.tu-dresden.de/info.php

obwohl session.gc_maxlifetime=1440 trotzdem wird Cookie gleich nach dem Schlissen des Browsers gelöscht
 
Also session.gc_maxlifetime hat nichts mit dem Browser zu tun. Wie das gc andeutet ist diese Einstellung fuer den Garbage Collector auf dem Server. Standardmaessig wird die Session nach 24 Minuten Inaktivitaet geloescht.
Mit session_set_cookie_params setzt Du session.cookie_lifetime, welche eigentlich die Funktion bieten sollte die Du suchst.
Funktioniert es denn garnicht, oder nur innerhalb von 24 Minuten?
Wie gesagt, ich wuerde ein permanentes Login mit normalen Cookies machen, besser gesagt, habe es gemacht.
Falls halt beim Login die Check-Box fuer's permantente Login angekreuzt wird setze ich einen Cookie mit einer Lebenszeit von 30 Tagen, beim Logout wird dieser geloescht.
Hier mal meine login.php:
PHP:
<?
$login=$_POST["login"];
if ($login)
 {
  $username=$_POST["username"];
  $password=$_POST["password"];
  $savelogin=$_POST["savelogin"];
  if (($username) && ($password))
			{
				$users=mysql_query("select * from users where username='$username'",$db);
				$user=mysql_fetch_array($users);
				if ($user)
					{
						$cryptedpassword=sha1($password);
						if ($cryptedpassword==$user[2])
							{
								if ($savelogin)
									{
										setcookie("id",$user[0],time()+2592000);
          setcookie("password",$cryptedpassword,time()+2592000);
         }
        $_SESSION["id"]=$user[0];
        mysql_query("update sessions set userid='$user[0]' where sessionid='$sessionid'",$db);
        header("Location:index.php".$sessionparm);
       }
      else
       {
        printf("Invalid password");
       }
     }
    else
     {
      printf("Invalid username");
     }
   }
  else
   {
    if (!$username)
     {
      printf("No username<br>");
     }
    if (!$password)
     {
      printf("No password<br>");
     }
   }
 }
?>
<form method="post" action="index.php?subsite=login.php<? printf($sessionparm_link); ?>">
<table class="vistable">
<tr><td>Username:</td><td><input type="text" name="username"></td></tr>
<tr><td>Password:</td><td><input type="password" name="password"></td></tr>
</table>
<?
if ($session[2]=="1")
 {
  ?>
  Stay logged in:
  <input type="checkbox" name="savelogin"><br>
  <?
 }
?>
<input type="submit" name="login" value="Login">
</form>

Und hier die logout.php:
PHP:
<?
if (($_COOKIE["id"]) && ($_COOKIE["password"]))
 {
  setcookie("id","",time()-3600);
  setcookie("password","",time()-3600);
 }
session_destroy();
mysql_query("update sessions set userid='0' where sessionid='$sessionid'",$db);
header("Location:index.php".$sessionparm);
?>
 
Ich danke Ihnen für die schnelle Antwort. Ich denke ich werde es wie Sie es vorgeschlagen haben machen.
Trotzdem würde mich interessieren, wieso das String das ich in Cookie abgespeichert habe nicht aus $_COOKIE[$my_String] rausbekomme. Liegt wahrscheinlich an Sonder Zeichen
 
Keine Ahnung ob Sonderzeichen in Cookienamen erlaubt sind, ich wuerde davon absehen.

:offtopic:
Und bitte nicht siezen, da fuehl ich mich so alt.
 
Zurück