Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich versuche seit wochen vergeblich eine funktionierende SESSION in meinem Projekt einzubinden. Irgendwie will es nicht klappen. Next step: VERZWEIFLUNG !

log.php:


<?php
function login_form ()
{
?>
<p>Anmeldung:</p>
<form action="log.php?login=1" method="post">
Login: <input type="text" name="login"><br>
Passwort: <input type="password" name="passwd"><br>
<input type="submit" value="Anmelden">
</form>
<?php
}
session_start();
if ($_GET['login'])
{
$user = "dpawlowski"; // Benutzername
$pass = "12345"; // Benutzerpasswort
if (($_POST['login'] == $user) && ($_POST['passwd'] == $pass))
{
$session_time = 15; // Dauer der Session (in Minuten)
$_SESSION['user'] = $_POST['login'];
$_SESSION['expire'] = time() + 60 * $session_time;
echo 'Autorisierung erfolgreich.<br>
<a href="log.php?logout=1">Abmelden</a><br>
Geschützte Seiten: <a href="data1.php">Daten 1</a>, <a href="data2.php">Daten 2</a>.';
}
else
{
echo 'Inkorrekte Angabe<br>';
login_form();
}
}
elseif ($_GET['logout'])
{
session_destroy();
echo 'Sie wurden abgemeldet';
}
else
{
login_form();
}
?>
[/PHP]

check_login.php:

[PHP]
<?php
session_start();
if (!$_SESSION)
{
echo 'Um auf diese Seite zuzugreifen, müssen Sie sich <a href="log.php">anmelden</a>.';
exit;
}
elseif ($_SESSION['expire'] <= time())
{
echo 'Ihre Session ist verfallen. Wiederholte <a href="log.php">Anmeldung</a> notwendig';
exit;
}

?>

data1.php:



<?php require "check_login.php"; ?>
<html>
<body>
<p><a href="log.php?logout=1">Abmelden</a></p>
<p>
Geheime Daten. Geheime Daten.
Geheime Daten. Geheime Daten.
Geheime Daten. Geheime Daten.
Geheime Daten. Geheime Daten.
</p>
</body>
</html>
[/PHP]

sobald ich data1.php aufrufe startet zum einen ein neuer session und zum anderen kommt die Fehlermeldung dass ich mich anmelden muss um auf diese Seite zuzugreifen.

Ausserdem erkennt der Skript $_GET['login'] und $_GET['logout'] nicht

und gibt als Error : Unknown index zurück.

Kennt jemand dieses Problem und kann mir freundlicherweise behilflich sein ?


if (!$_SESSION)
{
echo 'Um auf diese Seite zuzugreifen, müssen Sie sich <a href="log.php">anmelden</a>.';
exit;
}
[/PHP]

Hast du es mal mit

[php]if(session_is_registered('user') {......}

versucht?

Wenn du nur $_SESSION abfragst ohne den Namen, weiss das Script doch garnicht welche Session gemeint ist.

Ausserdem erkennt der Skript $_GET['login'] und $_GET['logout'] nicht

und gibt als Error : Unknown index zurück.


<?php
function login_form ()
{
?>
<p>Anmeldung:</p>
<form action="log.php?login=1" method="post">
Login: <input type="text" name="login"><br>
Passwort: <input type="password" name="passwd"><br>
<input type="submit" value="Anmelden">
</form>
<?php
}
session_start();
if (isset($_GET['login'])) // <--
{
$user = "dpawlowski"; // Benutzername
$pass = "12345"; // Benutzerpasswort
if (($_POST['login'] == $user) && ($_POST['passwd'] == $pass))
{
$session_time = 15; // Dauer der Session (in Minuten)
$_SESSION['user'] = $_POST['login'];
$_SESSION['expire'] = time() + 60 * $session_time;
echo 'Autorisierung erfolgreich.<br>
<a href="log.php?logout=1">Abmelden</a><br>
Geschützte Seiten: <a href="data1.php">Daten 1</a>, <a href="data2.php">Daten 2</a>.';
}
else
{
echo 'Inkorrekte Angabe<br>';
login_form();
}
}
elseif (isset( $_GET['logout'])) // <--
{
session_destroy();
echo 'Sie wurden abgemeldet';
}
else
{
login_form();
}
?>
[/PHP]


<?php
if (isset($_GET['login'])) // <--
......
elseif (isset( $_GET['logout'])) // <--
?>
[/PHP]

ist genauso zwecklos weil er immer noch die selbe Error zurückgibt.

????

ist genauso zwecklos weil er immer noch die selbe Error zurückgibt.

????

gib ma den genauen wortlaut deines fehlers an, und sag wo genau die zeile ist in der der fehler passiert

Hast Du in allen Dateien session_start drin?

Frank

Wenn ich in allen dateien session_start() reinmache dann startet er auf jeder Seite eine andere Session . Normalerweise muss ja die funktion session_start() schon selbst überprüfen ob schon eine Session gestartet ist, im ja Fall macht er mit der angefangenen Session weiter (müsste er normalerweise, was aber offensichtlich nicht der Fall ist) und im nein Fall also wenn keine Session gestartet ist bzw. wenn keine Session besteht startet er halt eben eine neue Session.

Wie gesagt register_globals sind standartmäsig off, gibt es irgendwelche anderen einstellungen damit eine Session reibungslos funktioniert? :confused:

Wenn ich in allen dateien session_start() reinmache dann startet er auf jeder Seite eine andere Session . Normalerweise muss ja die funktion session_start() schon selbst überprüfen ob schon eine Session gestartet ist, im ja Fall macht er mit der angefangenen Session weiter (müsste er normalerweise, was aber offensichtlich nicht der Fall ist) und im nein Fall also wenn keine Session gestartet ist bzw. wenn keine Session besteht startet er halt eben eine neue Session.

Wie gesagt register_globals sind standartmäsig off, gibt es irgendwelche anderen einstellungen damit eine Session reibungslos funktioniert? :confused:

wenn du folgende datei struktur hast:


// 1.php:

session_start();


// 2.php

session_start();

// index.php
session_start();
include( "1.php");
include( "2.php");
[/PHP]

hier wird in der index.php die session gestartet.

danach folgt der include der 1.php, in dem wiederum eine neue session gestartet wird.

danach folgt der include der 2.php, in dem wiederum eine neue session gestartet wird.

Fogle:

Man darf pro site aufruf nur 1 mal ein session_start() verwenden

gib ma den genauen wortlaut deines fehlers an, und sag wo genau die zeile ist in der der fehler passiert
wenn du folgende datei struktur hast:


// 1.php:

session_start();


// 2.php

session_start();

// index.php
session_start();
include( "1.php");
include( "2.php");
[/PHP]

In den include dateien habe ich kein session_start() und jede datei hat wirklich nur eine session_start().

Genaue wortlaut kann ich dir momentan nicht sagen weil ich momentan kein zugang zum Server habe(firma)... Im grunde genommen gibt er auch session bezüglich keine fehlermeldung , ich sehe nur anhand der /tmp ordner wo die sessions abgelegt werden dass immer mehrere sessions auftreten und nicht nur eine wie es sein soll.

php.ini Einstellungen:

register_globals=off

session.auto_start=on

session.use_trans_sid=1

session.use_cookies=0

Muss ich eigentlich an jedem link die PHPSESSID anhängen(wie ?) und wenn ja muss dann auf der nächsten Seite wieder session_start() stehen ? :confused:

Muss ich eigentlich an jedem link die PHPSESSID anhängen(wie ?) und wenn ja muss dann auf der nächsten Seite wieder session_start() stehen ? :confused:

ja an jeden link muss eine session id angehängt werden!

wenn du den apache webserver benutzt, kannst du aber eine umgebungsvariable setzen, damit der server automatisch die id anhängt.

wie diese genau heisst, kann ich dir aber nicht sagen.

session_start() muss trotzdem in den nächsten dateien stehen, da damit die "alte" session "wiederaufgenommen" wird

gibt es irgendwelche anderen einstellungen damit eine Session reibungslos funktioniert? :confused:

???????? :confused:

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.