Zitat von Crashbreaker
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
PHP 7.2 Session existiert auch wenn der Browser geschlossen ist
Einklappen
Neue Werbung 2019
Einklappen
X
-
Zitat von LudwigBr Beitrag anzeigenWie kommst du auf die Idee, dass der Nutzer nach einmal Browserschließen dein Bild wieder angezeigt bekommen will? Das scheint mir eine willkürlich festgelegter Zeitraum zu sein.
Wenn sich das Bild ändert, dann zeig es ihm nach jeder Änderung wieder an. Wenn du den Nutzer damit "nerven" möchtest und er das regelmäßig wegklicken soll, dann mach eine zeitliche Abhängigkeit drauß.
Der Nutzer will das weg Klicken eines Bildes optional halten.
Das Bild ändert sich nicht. Der bleibt Konstant erhalten. Daher gibt es kein zeitliche Abhilfe.
Design technisch möchte der Inhaber es so haben. Daher geht es hier nur um die Funktionalität und nicht um welchen Sinn was hat oder nicht hat.
MfG
Daniel
Kommentar
-
Zitat von erc Beitrag anzeigenWas verstehst du unter "Lebensdauer des Session"? Und hast du es mit einem anderen Browser getestet?
Ich meine damit einfach, sobald ein Nutzer das Fenster / den Browser geschlossen hat, sollen die Session einfach nicht mehr existieren.
Ja habe es auch mit anderen gängigen und auch auf Mobilen Browsern getestet.
MfG
Daniel
Kommentar
-
Wenn du dir selbst (ohne Session) ein Cookie mit PHP schreibst? Und teste mal in anderen Bowsern.
int $expire = 0
...
Hat der Parameter den Wert 0 oder ist er nicht gesetzt, verfällt das Cookie am Ende der Session (wenn der Browser geschlossen wird).
The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
Kommentar
-
Zitat von Crashbreaker Beitrag anzeigenIch meine damit einfach, sobald ein Nutzer das Fenster / den Browser geschlossen hat, sollen die Session einfach nicht mehr existieren.
Auf welcher Seite liegt dein Problem? Ist es das Session Cookie oder das Session File?
Zitat von Crashbreaker Beitrag anzeigenJa habe es auch mit anderen gängigen und auch auf Mobilen Browsern getestet.
Kommentar
-
Zitat von Crashbreaker Beitrag anzeigenIch habe ein Bild der auf jeder Seite und Unterseiten existiert.
Der Anwender möchte aber bei bedarf dieses Bild nicht mehr angezeigt bekommen. Dafür ist auf dem Bild, Bspw. oben rechts ein X- sowie ein PLUS-Button platziert.
Klickt der Anwender auf den X-Button verschwindet das Bild und nur der Plus-Button erscheint um die Entscheidung wieder revidieren zu können.
Der Anwender möchte das Bild aber auf den Folgeseiten (und auch auf Unterseiten etc.) weiterhin ebenfalls nicht mehr angezeigt sehen.
Dafür hatte ich dann die Hilfe und Lösung über Session-Variablen erhofft.
Da das Cookie über Seitenaufrufe hinweg gespeichert bleibt, ist das der Lösungsweg. Natürlich kannst du auch über Javascript dem Cookie ein Ablaufdatum mitgeben, oder 0 damit es bei Browserschliessung gelöscht wird.
Serverseitig fragst du erst das Cookie ab und setzt dann die CSS Klasse im img Element..
Das Ein- und Ausblenden machst zum Beispiel mit einer klasse die display hidden beinhaltet. Die Klasse zum Anzeigen hat dann display: inline.
Du wechselt also nur die CSS Klasse zu dem Bild, abhängig vom Wert im Cookie.
Hat jemand, Cookies dauerhaft auf ablehnen eingestellt, bekommt er das Bild eben ständig, das ist aber normal.
Wenn, du diesen Fall auch abdecken willst, sowie wenn jemand Javascript abgeschaltet hat, gibt es noch den Weg über ein Formular und GET. Die Anzeige regelst du dann über den Parameter, das machen viele Seiten auch so.
Kommentar
-
Hallo,
ich danke dir erc und protestix für den Lösungsansatz.
Klingt verständlich und plausible ... Jedoch nach meiner Versuchung an der obigen Beispiel hat fehlgeschlagen.
Habe es nicht hinbekommen.
Könntet ihr mir anhand der obigen Beispiel helfen?
Ich habe dort den Wert statt in ein Session-Variable in ein Cookie-Variable anhand der setcookie() Methode abgespeichert. Später diese dann mit $_COOKIE abgefragt.
Die Session-ID ändert sich permanent, mal ist die 1 (true) da mal statt die 1 wird der Session-ID als Wert abgespeichert.
Wenn ihr mir ein Beispiel zeigen könntet, wäre ich euch sehr dankbar.
MfG
Daniel
Kommentar
-
Hier mein bisheriger versuch:
PHP-Code:<?php
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.cookie_lifetime', 0);
//session_start();
if ( isset($_GET['activeImage']) && $_GET['activeImage'] == 'true' ) {
// $_SESSION['activeImage'] = TRUE;
setcookie(session_name(), TRUE, time()+1, '/');
}
if ( isset($_GET['activeImage']) && $_GET['activeImage'] == 'false' ) {
// $_SESSION = [];
if (isset($_COOKIE[\session_name()]) || \ini_get('session.use_cookies')) {
$params = \session_get_cookie_params();
@\setcookie(
session_name(),
'',
\time() - 42000,
$params['path'],
$params['domain'],
$params['secure'],
$params['httponly']
);
}
// if (\session_status() == PHP_SESSION_ACTIVE) {
// @\session_destroy();
// }
// @\session_unset();
// unset($_SESSION);
}
$cookie = 'kein Cookie übertragen';
if (isset($_COOKIE['PHPSESSID'])) {
$cookie = implode(" ", $_COOKIE);
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>ISessionid and cookies</title>
</head>
<body>
<h3>Im Server</h3>
<p>
$_Cookie vom Browser: <?= $cookie; ?><br>
session_id: <?= session_id(); ?><br>
</p>
<?php if(isset($_COOKIE['activeImage']) && $_COOKIE['activeImage'] == TRUE): ?>
<img alt="test" src="test.jpg">
<?php endif; ?>
<h3>Cookies im Browser</h3>
<p id="showcookies"></p>
<p><a href="?">Startseite</a></p>
<p><a href="?activeImage=true">Image aktive</a></p>
<p><a href="?activeImage=false">Image deaktive</a></p>
<script>
var x = document.cookie || 'LEER';
var val = document.getElementById("showcookies");
val.textContent = x;
console.log(document.cookie);
</script>
</body>
</html>
Bedanke mich im Voraus für die Mühe und Verständnis.
MfG
Daniel
Kommentar
-
Zuletzt geändert von MrChangelog; 17.05.2018, 13:27.Meine Idee: nutze 'sessionStorage' von JavaScript. Das wird beim Schliessen des Browser jeweils gelöscht
Edit: wenn du auf den Inhalt vom sessionStorage im PHP zugreifen willst, müsstst du mit Ajax noch einen XMLHttpRequest machen.
Kommentar
-
Zitat von MrChangelog Beitrag anzeigenMeine Idee: nutze 'sessionStorage' von JavaScript. Das wird beim Schliessen des Browser jeweils gelöscht
Da es wohl immer noch nicht klar ist hier mal ein Beispiel nur mit einem Cookie
PHP-Code:<?php
if ( isset($_COOKIE['show_img']) && $_COOKIE['show_img'] == 'false' ) {
$display = 'none';
$button_text = 'Bild anzeigen';
}else{
setcookie('show_img', "true", 0);
$display = 'inline';
$button_text = 'Bild verbergen';
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Cookie example to toggle the visibility of an image</title>
<style>
p:after { content: " "; clear: both; display: block; }
body {max-width: 430px; border: 1px silver solid; padding: 5px;}
img#img_info { display: <?= $display; ?>; margin: 5px; float: left;}
</style>
</head>
<body>
<p>Drücke [F5] zum aktualisieren. Bildstatus bleibt erhalten. Beim Schliessen des Browers wird das Cookie gelöscht. Das Bild erscheint wieder, unabhängig vom vorherigen Zustand.</p>
<button id="btn_toggle" value="whatever"><?= $button_text; ?></button>
<p>Lorem ipsum dolor sit amet consectetuer tincidunt et iaculis Nunc non.</p>
<p>Ut leo tincidunt consequat elit Quisque volutpat at mauris congue turpis.</p>
<p><img id="img_info" src="https://picsum.photos/200/300" width="200" height="300" alt="photo">
Ac pellentesque nunc Curabitur et habitasse consequat sed pellentesque wisi ante.
</p>
<script>
function getCookie(name) {
var name = name + "=";
var array = document.cookie.split(';');
var max = array.length
for(var i = 0; i < max; i++) {
var c = array[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
var btn = document.getElementById("btn_toggle");
var img = document.getElementById("img_info");
btn.addEventListener('click', function () {
if (getCookie("show_img") == "false") {
document.cookie = "show_img=true; expires=0;";
img.style.display = "inline";
btn.textContent = "Bild verbergen";
}else{
document.cookie = "show_img=false; expires=0;";
img.style.display = "none";
btn.textContent = "Bild anzeigen";
}
}, false);
</script>
</body>
</html>
Im PHP Teil wird lediglich geschaut ob ein Cookie existiert, wenn dies nicht der Fall ist, dann wird ein Cookie angelegt.
Weiter werden 2 Variablen definiert und mit Werten versehen, die im weiteren Verlauf gebraucht werden
Im HTML Teil ist nur Text, ein Bild und ein Schalter(Button).
Der Button wechselt die Beschriftung, daher die Variable von PHP. Das value vom Button interessiert hier nicht aber die id ist wichtig.
Das Bild erhält die Höhe und Breite, damit es im Browser nicht springt und mit CSS wird der Anzeigestatus festgelegt.
Ausgangswerte für den Schalter und das Bild kommen über Variable am Anfang von PHP.
Die Umschaltung(toggle) erfolgt mit Javascript. Dazu wird das Cookie show_img über die Funktion getcookie ausgelesen.
Abhängig vom Zustand(Wert) des Cookies wird dann der Zustand des Bildes, die Schrift im Button und der Wert des Cookies neu gesetzt.
Mit dem Button schaltet man den Zustand um, von Bild anzeigen oder nicht anzeigen.
Das Cookie stirbt am Ende der Browsersitzung.
Getestet am mit Safari, FF, und Chrome.
EDIT:
Es müssen alle Browserfenster geschlossen werden, es reicht nicht das Browserfenster zu schlieesen, welches man gerade anschaut, wenn noch ein weiteres Browserfenster im Hintergrund offen ist, dies könnte sonst zu Irritationen und falschen Annahmen führen.
Kommentar
-
Zitat von protestix Beitrag anzeigen[...] und das er keine Session braucht, hatten wir schon vorab geklärt.
Kommentar
-
Hallo Leute,
wow ich danke für euch allen die sich Mühe gemacht haben und mir stehts hier versucht haben mit ihren Antworten zu helfen und bitte höflichst um Verzeihung meiner Verzögerung.
Ich werde mir das letztere genauer anscheuen und mein Versuch erneut starten. Jedoch ist mir momentan beruflich was dazwischen gekommen und daher muss mein Versuch hier leider etwas warten.
Ich hoffe um Verständnis für meine Verzögerung.
MfG
Daniel
PS:
Ich werde sobald wie möglich zurück kommen und an dem Punkt weiter arbeiten.
Kommentar
Kommentar