session_destroy

Airis

Erfahrenes Mitglied
Hallo Zusammen,

ist es möglich, und ja wie, eine Session nur teilweise zu zerstören?
Hintergrund ist, ein User befindet sich in einer Session mit Nickname, Passwort und gewählter Sprache. Am Schluss der Session soll sich der User aus Sicherheitsgründen ausloggen und zur Startseite zurückgeführt werden. Hierzu benötige ich allerdings die gewählte Sprache.
Sieht hier jemand einen Ansatz oder hat eine Lösung für mich?

Viele Grüsse aus Frankreich
Airis
 
Wenn Du z.B. die UserID und die Sprache in der Session speicherst, also
$_SESSION['id']
und
$_SESSION['lang']
hast, dann kannst Du den User mit
PHP:
unset($_SESSION['id']);
ausloggen und die Spracheinstellung beibehalten.

Sollte gehen, ich geb aber keine Garantie. Und schon garkein Rueckgaberecht. ;)
 
Oder du weist der $_SESSION['language'] erst noch eine andere Variable zu, damit du diese dann weiterverwenden kannst.
Also z.B.:
PHP:
<?php
    session_start();
    $sprache = $_SESSION['language'];
    session_unset();
    session_destroy();

    header('Location:blabla.php?language='.$sprache);
?>
 
Hallo Jörg,

nett von Dir zu hören.

Vorab eine Frage:
Ist es überhaupt in einem Script möglich eine Session zu zerstören und anschliessend auf die Sprache der Session zurückzugreifen? Aber ich lasse mich gerne belehren.

Nun zum Fall:
Ich habe einiges ausprobiert und bin nun bei dieser Variante in meiner "Auslog-Seite":

PHP:
<?php
	//session_start(); habe ich bereits in der "languages/functions.inc.php"
	$sprache = $_SESSION['lang'];
	session_unset();
	session_destroy();
	//header(Location:thanks.php?lang='.$sprache);
	header("Location:thanks.php?lang='.$sprache.'");
?>

Es kommen aber immer folgende Meldungen:
Notice: Undefined index: change in D:\1server\xampp\htdocs\languages\functions.inc.php on line 6
Notice: Undefined index: lang in D:\1server\xampp\htdocs\languages\functions.inc.php on line 7

Hier auch mal meine "languages/functions.inc.php":

PHP:
<?php
//========================
// functions.inc.php
//========================
session_start();
if ($_GET["change"] == 1) $_SESSION["lang"] = (isset($_GET["lang"]))?$_GET["lang"]:"de";
switch ($_SESSION["lang"]) {
case "de": include("languages/de/langDE.inc.php");
break;
case "en": include("languages/en/langEN.inc.php");
break;
case "es": include("languages/es/langES.inc.php");
break;
case "fr": include("languages/fr/langFR.inc.php");
break;
default: include("languages/de/langDE.inc.php");
break;
}
?>
Siehst Du irgendwo eine Lösung?

Viele Grüsse aus Frankreich
Airis
 
Hallo reptiler,

reptiler hat gesagt.:
Wenn Du z.B. die UserID und die Sprache in der Session speicherst, also
$_SESSION['id']
und
$_SESSION['lang']
hast, dann kannst Du den User mit
PHP:
unset($_SESSION['id']);
ausloggen und die Spracheinstellung beibehalten.

Verstehe ich noch nicht ganz. Muss ich die "id" und "lang" von der ersten Seite an mit deklarieren und über alle Seiten mit durchziehen oder reicht es auf der letzten Seite (Auslog-Seite)?
Und ich muss für beide eine getrennte Session schreiben, richtig?

Viele Grüsse aus Frankreich
Airis
 
Ich kenne die Funktion/Auswirkung von dem $_GET['change'] nicht, aber ich wuerde es so loesen:
PHP:
//========================
// functions.inc.php
//========================
session_start();
if(isset($_GET['change'])) {
    if(isset($_GET['lang'])) {
        $_SESSION['lang'] = $_GET['lang'];
    } else {
        $_SESSION['lang'] = 'de';
    }
}
include('languages/'.$_SESSION['lang'].'/lang'.strtoupper($_SESSION['lang']).'.inc.php');
Dann ist es dynamischer und fuer weitere Sprachen erweiterbar.

OT: Wo steckst du in Frankreich? Joues-tu des Boules?
 
Hallo Jörg,


soweit so gut.
Ich bekomme, trotz richtiger Übersetzung, folgende Meldung:
Warning: main(languages//lang.inc.php) [function.main]: failed to open stream: No such file or directory in D:\1server\xampp\htdocs\languages\functions.inc.php on line 13

Warning: main() [function.include]: Failed opening 'languages//lang.inc.php' for inclusion (include_path='.;D:\1server\xampp\php\pear\') in D:\1server\xampp\htdocs\languages\functions.inc.php on line 13

Die "lang" wird nicht erkannt, oder?

In der Auslog-Seite wird mir dann auch die Sprache nicht mehr ausgegeben.

Mache ich noch etwas falsch.

Viele Grüsse aus Frankreich?
Airis


P.S.
Ich bin 100 km westlich Paris, in Amiens. "Kugeln backe ich keine" haha.....
 
Airis hat gesagt.:
Hallo reptiler,



Verstehe ich noch nicht ganz. Muss ich die "id" und "lang" von der ersten Seite an mit deklarieren und über alle Seiten mit durchziehen oder reicht es auf der letzten Seite (Auslog-Seite)?
Und ich muss für beide eine getrennte Session schreiben, richtig?

Viele Grüsse aus Frankreich
Airis

Grundsaetzlich wird die Session ja am Anfang jedes Scripts welches die Session-Daten benoetigt gestartet.
Wenn noch keine Sprache ausgewaehlt ist kannst Du wie Joerg beschrieben hat eine Default-Sprache setzen indem z.B. so vorgehst:
PHP:
if (!isset($_SESSION['lang']))
 {
  $_SESSION['lang']="de";
 }

Wenn eine Sprache gewaehlt wird schreibst Du sie einfach dort hinein.
PHP:
$_SESSION['lang']=$selectedlang;

Beim Einloggen schreibst Du dann die User-Daten in die Session, bei mir ist das die ID.
PHP:
$_SESSION['id']=$user['id'];

Beim Ausloggen sollte es dann vollkommen reichen, wie zuvor beschrieben
PHP:
unset($_SESSION['id']);
auszufuehren.
Oder aber eben den von Joerg beschriebenen Weg waehlen. Also die Sprache erst in eine Variable speichern, die Session zerstoeren und dann die Sprache im URL uebergeben, sodass sie gleich wieder gesetzt werden kann.
 
Dann ist die Variable $_SESSION['lang'] nicht gefüllt.
Mach das mal so:
PHP:
//========================
// functions.inc.php
//========================
session_start();
if(isset($_GET['change'])) {
    if(isset($_GET['lang'])) {
        $_SESSION['lang'] = $_GET['lang'];
    } else {
        $_SESSION['lang'] = 'de';
    }
}
include('languages/'.$_GET['lang'].'/lang'.strtoupper($_GET['lang']).'.inc.php');

Tja, mein Französisch ist klasse, aber mit der Sprache haperts halt noch.
Spielst du Boule?
 
Das Problem wird sein, dass die Variable $_SESSION['lang'] nur dann gesetzt wird, wenn es auch die GET-Parameter change und lang gibt.
PHP:
<?php

	session_start();

	$accepted_languages = array('en', 'de', 'es', 'fr');
	if( !isset($_SESSION['lang']) ) {
		$_SESSION['lang'] = ( isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && in_array(current(explode('-', $_SERVER['HTTP_ACCEPT_LANGUAGE'])), $accepted_languages) )
			? strtolower(current(explode('-', $_SERVER['HTTP_ACCEPT_LANGUAGE'])))
			: 'de';
	}
	if( isset($_GET['change']) ) {
		$_SESSION['lang'] = ( isset($_GET['lang']) && in_array(trim($_GET['lang']), $accepted_languages) )
			? trim($_GET['lang'])
			: 'de';
	}
	if( file_exists('languages/'.$_SESSION['lang'].'/lang'.strtoupper($_SESSION['lang']).'.inc.php') ) {
		include 'languages/'.$_SESSION['lang'].'/lang'.strtoupper($_SESSION['lang']).'.inc.php';
	}

?>
Um nun die bevorzugten Sprache eines User Agent und dessen Präferenz zu ermitteln, könntest du auch einen bereits in einem anderen Thema erwähnten Algorithmus verwenden.
 
Zurück