wake-up-neo.com

Legen Sie die Session-Variable mit Javascript in fest PHP

Ist es möglich, Sitzungsvariablen PHP mit Javascript festzulegen?

35
Sanjay Khatri

In JavaScript:

jQuery('#div_session_write').load('session_write.php?session_name=new_value');

In der Datei session_write.php:

<?
session_start();

if (isset($_GET['session_name'])) {$_SESSION['session_name'] = $_GET['session_name'];}
?>

In HTML:

<div id='div_session_write'> </div>
27
BGabesz

Die Sitzung wird serverseitig gespeichert, sodass Sie aus JavaScript keine Werte hinzufügen können. Alles, was Sie clientseitig erhalten, ist das Session-Cookie, das eine ID enthält. Eine Möglichkeit wäre, eine AJAX - Anforderung an ein serverseitiges Skript zu senden, das die Sitzungsvariable setzt. Beispiel mit der Methode .post() von jQuery:

$.post('/setsessionvariable.php', { name: 'value' });

Sie sollten natürlich vorsichtig sein, wenn Sie ein solches Skript veröffentlichen.

18
Darin Dimitrov

Wenn Sie eine clientseitige Manipulation persistenter Daten zulassen möchten, verwenden Sie am besten nur Cookies. Dafür wurden Cookies entwickelt.

7
Lèse majesté

oder durch pure js, siehe auch über StackOverflow: JavaScript-Postanforderung wie ein Formular submit

Aber warum versuchen Sie, $ _session mit js zu setzen? Jede JS-Variable kann von einem Spieler mit einigen Drittanbieter-Tools (Firebug) geändert werden, sodass jeder Spieler die $ _session [] ändern kann! Und PHP kann js keine geheimen Codes geben (oder sogar verschlüsselt), es ist alles sichtbar. Jquery oder AJAX kann nicht helfen, es ist alles js am Ende.

Dies passiert im Online-Game-Design viel. (Vielleicht ein bisschen Game Theory? Verzeihen Sie, ich habe einen Meister und setze gerne Theorie ein :)) Wie in crimegameonline.com initialisiere ich ein Minispiel-Puzzle mit PHP und speichert das ursprüngliche Board in $ _SESSION [ 'foo'] . Dann benutze ich php, um [make html, das] den anfänglichen Puzzle-Start zu zeigen. Dann übernimmt js die Kontrolle und schaut auf die Knöpfe und das Modding-Element von xy, während die Spieler sich bewegen. Ich möchte NICHT Client-Server spielen (wie WOW) und den Server fragen: "Hey, mein Spieler möchte zu xy wechseln. Was soll ich tun?" Es ist viel Bandbreite, ich möchte nicht, dass der Server beteiligt ist. 

Und ich kann einfach POSTs senden, wenn der Spieler einen Fehler macht (oder stirbt). Der Player kann ausgehende POSTs blockieren (und lokale JS-Vars ändern, um den Out-Count zu vergessen) oder einfach ausgehende POST -Daten ändern. JA, die Leute machen das, besonders wenn es sich um echtes Geld handelt.

Wenn das Spiel klein ist, können Sie Postaktualisierungen mit JEDEM Zug (Tastenklick), 1-Weg und Post-Vars der letzten ZWEI Züge senden. Dann prüft der Server das letzte Mal, und in $ _SESSION ['allMoves'] wird ein neues angezeigt. Wenn das Spiel sehr umfangreich ist, können Sie einfach ein "halbes" Update aller vorangegangenen Züge senden und in der Liste des letzten Updates nachsehen, ob es passt.

Dann, nachdem ein js denkt, wir hätten einen Gewinn, füge einen Button hinzu oder modifiziere ihn, um die Seiten zu wechseln:

document.getElementById('but1').onclick=Function("leave()");
...
function leave() {
    var line='crimegameonline-p9b.php';
    top.location.href=line;
}

Dann sieht die neue Seite PHP auf $ _SESSION ['init'] und spielt durch jede der $ _ SESSION ['allMoves'], um zu sehen, ob sie wirklich ein Gewinner ist. Der Server (PHP) muss entscheiden, ob er wirklich ein Gewinner ist, nicht der Client (js).

3
dako

Sie können einen Sitzungswert nicht direkt mit Javascript bearbeiten - sie sind nur auf dem Server vorhanden.

Sie können jedoch zulassen, dass Ihr Javascript in der Sitzung Werte erhält und festlegt, indem Sie AJAX - Aufrufe verwenden.

Siehe auch

1
Paul Dixon

Eine einfache Möglichkeit, die Sitzungsvariable festzulegen, ist das Senden einer Anforderung an eine andere Datei PHP. Hier müssen Sie nicht Jquery oder eine andere Bibliothek verwenden.

Angenommen, ich habe index.php datei, in der ich SESSION-Variable erstellt (sagen Sie $_SESSION['v']=0), wenn SESSION nicht erstellt wird.

Code ist wie folgt:

session_start();
if(!isset($_SESSION['v']))
{   
    $_SESSION['v']=0;
}
else
{
    header("Location:connect.php");
}

Jetzt in count.html möchte ich diese Sitzungsvariable auf 1 setzen.

Inhalt in count.html

function doneHandler(result) {
   window.location="setSession.php";
}

Senden Sie im count.html javascript-Teil eine Anfrage an eine andere PHP -Datei (sagen Sie setSession.php), in der ich auf Sitzungsvariable zugreifen kann.

Also in setSession.php schreiben

session_start(); 
$_SESSION['v']=1;
header('Location:index.php');
1
Shashidhara

seien Sie vorsichtig, da dies ein Sicherheitsrisiko darstellt. Angreifer könnten einfach wiederholt Daten in Sitzungsvariablen einfügen, die auf dem Server gespeichert sind. Dies eröffnet Ihnen die Möglichkeit, Ihren Server mit Junk-Sitzungsdaten zu überlasten.

hier ist ein Beispiel für Code, den Sie nicht möchten.

<input type="hidden" value="..." name="putIntoSession">
..
<?php
$_SESSION["somekey"] = $_POST["putIntoSession"]
?>

Jetzt kann ein Angreifer den Wert von putIntoSession einfach ändern und das Formular Milliarden Mal absenden. Boom! 

Wenn Sie zum Erstellen eines AJAX -Dienstes dies tun, sollten Sie sicherstellen, dass Sie die Sicherheit erzwingen, um sicherzustellen, dass wiederholte Anforderungen nicht ausgeführt werden können, dass Sie den empfangenen Wert abschneiden und dies tun einige grundlegende Datenvalidierung.

0
Payam Azadi

Nicht möglich. Weil JavaScript clientseitig und Sitzung serverseitig ist. Um irgendetwas im Zusammenhang mit einer PHP -Session zu tun, müssen Sie zum Server gehen.

0
Ms_Lucky13

Ich habe diese Frage mit Ajax gelöst. Ich mache einen Ajax-Aufruf an eine PHP -Seite, auf der der übergebene Wert in einer Session gespeichert wird.

Das Beispiel, das ich Ihnen zeigen werde, ist: Wenn Sie den Wert der Anzahl der Elemente ändern, die in einer Datentabelle angezeigt werden sollen, wird dieser Wert in der Sitzung gespeichert.

$('#table-campus').on( 'length.dt', function ( e, settings, len ) {
    $.ajax ({
       data:        {"numElems": len},
       url:        '../../Utiles/GuardarNumElems.php',
       type:        'post'
    }); 
});

Und das GuardarNumElems.php lautet wie folgt:

<?php    
    session_start();

    if(isset ($_POST['numElems'] )){
        $numElems = $_POST['numElems'];        
        $_SESSION['elems_table'] = $numElems;
    }else{
        $_SESSION['elems_table'] = 25;
    } 
?>
0
Joacer