Variablen in Sessions übergeben?

Alles, was PHP betrifft, kann hier besprochen werden.

Variablen in Sessions übergeben?

Postby H.Klingel » 09. March 2006 16:28

Hallo,
nochmal ich...

Ich wüsste gerne noch eure Meinung dazu, ob es Sinn macht, Variablen über Session zu übergeben?

Ich denke, dass ich maximal 5 Variablen pro Seite übergeben muss. Ich möchte diese aber auch nicht über die Adresszeile übergeben, sondern wenn möglich, über die Session.

Ich stelle mir das ungefähr so vor:

datei1.php:
.
.
.
session_register('test', 'hallo')
.
.
.

datei2.php:

session_start();

$test = $_SESSION['test'];

session_unregister('test);
.
.
.


Macht das Sinn?

Danke,
Harald
H.Klingel
 
Posts: 31
Joined: 29. August 2005 09:07

Postby Wiedmann » 09. March 2006 16:50

a) warum soll das eine schlechte Idee sein?

b) session_register/unregister solltest du weglassen dafür im ersten Script auch ein session_start().

c) wenn du einer lokalen Variablen eine Sessionvariable zuweisst, sollten die verschiedene Namen haben. Wobei man sich das zuweisen ja auch sparen kann. Du kannst ja im ganzen Script auch direkt mit der Sessionvariablen arbeiten.

d) hattest du nicht schon einen Thread zu diesem Thema?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby KingCrunch » 10. March 2006 00:34

a) Das macht insofern Sinn, dass zum Zeitpunt der Abarbeitung des vorhergehenden Scripts schon bekannt ist, was danach kommen soll (oder so ähnlich).
b) session_resgister und Co. würdich ebenfalls weglassen. Arbeite lieber direkt über die Sessionvariable $_SESSION. Und natürlich session_start nicht vergessen
c) Siehe Wiedmann

Kurzzusammenfassung:
Möchtest du mehrere Situationen zur Auswahl stellen, kannst du das so vergessen, da die Session nur solange zugewiesen kann, wie das Script läuft, wenn dann nicht mehr der Fall ist, wenn die Ausgabe vollständig bein Client angekommen ist. Pauschal kann man sagen: Inhalte können in einer Session "rüber geschleift" werden, wenn die Aktionen des Nutzersnicht ausschlaggebend ist.
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Danke

Postby H.Klingel » 13. March 2006 11:47

Danke für die Antworten.

Ich habe mich relativ viel mit Sessions beschäftigt und überall nur gelesen, dass man eine Session 'maßvoll' beladen soll.
Außerdem war ich mir nicht sicher, ob es ein guter Stil ist, Variablen in die Session zu packen, die nur an das nächste Skript übergeben werden und danach evtl. nicht wieder gebraucht werden.

Nochmal Danke,
Harald
H.Klingel
 
Posts: 31
Joined: 29. August 2005 09:07

Postby KingCrunch » 13. March 2006 15:47

Öh, ob das nun guter Stil ist, weiß ich nicht :D Wennde einfach Variablen zu einem anderen Script übergibst und sie dann wieder entfernst (da sie sonst über alle Seiten geschleift werden), dürfte es aber keine Probleme geben
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

SESSION variable auch für andere Scripte brauchbar

Postby Sorfor » 19. March 2006 12:44

Code: Select all
if($_POST['nameneingabe'] == $table["userid"] && $_POST['passeingabe'] == $pass && !empty($_POST['nameneingabe']) && !empty($_POST['passeingabe'])) {

 $result = mysql_query($sql, $conn);
 $table = mysql_fetch_array($result);

 $usera = $table["userid"];
 $passa = $table["password"];
 
 $_SESSION['pass'] = $passa;
 $_SESSION['user'] = $usera;

echo "<p align=center><a href=index.php> Nun eingeloggt.</a></p>";

} else {

 echo "<p align=center><a href=index.php?page=login>Du konntest nicht verifiziert werden</a></p>";
}


So schaut mein kleines Script aus . Nun will ich aber die SESSION variable auch für jede andere Seite verfügbar machen. Anscheinend sind diese aber nur solange registriert bis das script zu Ende ist - wo hört dann das superglobale Array auf?

Am Anfang von der index.php hab ich
Code: Select all
session_start();

stehen.
Ich hab den neusten XAMPP.

Zu meiner Entschuldigung: Ich habe echt alles versucht um diesen Post nicht schreiben zu müssen :)
Sorfor
 
Posts: 12
Joined: 12. November 2005 18:48

Postby Wiedmann » 19. March 2006 12:50

Anscheinend sind diese aber nur solange registriert bis das script zu Ende ist

Wie kommst du darauf? Oder anders:
Es fehlt der entspr. Codeauschnitt von der anderen Seite.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Sorfor » 19. March 2006 13:13

Code: Select all
//funktion.php
function admin()
{
$login_user = $_SESSION['user'];
$login_pass = $_SESSION['pass'];
$page = $_GET['page'];

include("db.php");

 $conn = mysql_connect($mysql_host, $mysql_user, $mysql_password);
 $db = mysql_select_db($mysql_db, $conn);
 $sql = "SELECT * FROM user WHERE userid ='$login_user'";

 $result = mysql_query($sql, $conn);
 $table = mysql_fetch_array($result);


 if($login_pass != $table["password"] || empty($login_pass))
 {
  echo "
  <meta http-equiv=Refresh content=\"3; URL=index.php\">
  <p align=center>
  Du kannst nicht als zugriffsberechtigter User verifiziert werden.
  </p>
  ";
  exit;
 } elseif($table["flags"] == "u") {
  if($page != "user")
  {
   echo "
   <meta http-equiv=Refresh content=\"3; URL=index.php\">
   <p align=center>
   Du kannst nicht als zugriffsberechtigter User verifiziert werden, weil du mindere Recht hast.
   </p>";
   exit;
  }
 } elseif($table["flags"] == "fa") {
  if($page != "signup" && $page != "user")
  {
   echo "
   <meta http-equiv=Refresh content=\"3; URL=index.php\">
   <p align=center>
   Du kannst nicht als zugriffsberechtigter User verifiziert werden.
   </p>
   ";
   exit;
  }
 }
}

Code: Select all
//index.php
<? session_start();
   include("funktions.php"); ?>


<html>
<head>
   <title></title>
</head>

<body>
<table><tr>
<td valign="top">Hier ist der öffentliche Bereich<br>
<a href="http://web.de">web.de</a><br><br>

Hallo <? echo $_SESSION["user"] ?>

</td>
  <td width="30">&nbsp;</td>
  <td valign="top">
<? if(!isset($_GET['page'])){
       $_GET['page'] = "protectedpage";
     }
       include($_GET['page'].".php");  ?>
  </td>
 
 </tr>
</table>
</body>
</html>

Code: Select all
//geschützte seite user.php
<? admin_check(); ?>
-sensibler inhalt-


Mein Problem ist nun, dass ich, sobald sich $_GET['page'] geändert hat, das $_SESSION Array wieder leer ist, oder viell eine neue Session erstellt wurde.
Die Funktion der Funktion muss ich höchstwahrscheinlich nicht erklären ;)

Im Index.php ist es mir zB nicht mehr möglich die in dem login script von oben registrierte $_SESSION variable user auszugeben.
Sorfor
 
Posts: 12
Joined: 12. November 2005 18:48

Entschuldigung

Postby Sorfor » 19. March 2006 13:35

Entschuldigt bitte, dass ich eure Mühe in Anspruch genommen habe.

Es war mal wieder die Vergesslichkeit - ich hatte nämlich in einer anderen included php einen Codeschnipsel entdeckt, der meine $_SESSION variablen aufgehoben hat.... :evil:
Sorfor
 
Posts: 12
Joined: 12. November 2005 18:48

Postby ollo » 23. March 2006 23:17

Du fragst aus der datenbank ab, ob der User existiert, dessen Name und Pass schon in der Session stehen.

Im Prinzip ist es wurscht, aber bei mir läuft der Login normalerweise so ab:

Login mit Name und Pass (Session ist noch leer) -->
Check gegen die DB -->
wenn ok, UserId in die Session schreiben, bei Bedarf auch Name und weitere Daten.

Auf diese Weise brauchst du bei jedem Skript im geschützten Bereich nur zu checken ob die UserId in der Session gesetzt ist und musst nicht jedes mal wieder die DB bemühen.
Aber(!) es mag auch Fälle geben, wo man jedesmal connecten möchte, etwa wenn der User sofort rausfliegen soll wenn man ihn löscht/sperrt. Ansonsten bleibt er ja noch bis zum Ablauf der Session eingeloggt, was aber in den meisten Fällen recht unkritisch sein dürfte. Letztendlich ist es eine Frage von Sicherheit vs. Performance.
ollo
 
Posts: 85
Joined: 11. November 2004 12:29


Return to PHP

Who is online

Users browsing this forum: No registered users and 8 guests