Définir la variable Session en utilisant javascript en PHP

Est-il possible de définir des variables de session PHP en utilisant Javascript?

En JavaScript:

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

Dans le fichier session_write.php:

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

En HTML:

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

La session est stockée sur le serveur, de sorte que vous ne pouvez pas y ajouter de valeurs JavaScript. Tout ce que vous obtenez côté client est le cookie de session qui contient un identifiant. Une possibilité serait d'envoyer une requête AJAX à un script côté serveur qui définirait la variable de session. Exemple avec la méthode .post() de jQuery:

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

Vous devriez, bien sûr, être prudent à propos d'exposer ce script.

Si vous souhaitez autoriser la manipulation côté client des données persistantes, il est préférable d'utiliser les cookies. C'est ce que les cookies ont été conçus pour.

Ou par pure js, voir aussi sur StackOverflow: demande de publication JavaScript comme formulaire de soumission

MAIS POURQUOI essayer de régler $ _session avec js? Toute variable JS peut être modifiée par un joueur avec des outils tiers (firebug), donc n'importe quel joueur peut mod le $ _session []! Et PHP ne peut donner aucun code secret (ou même [rouler] chiffré) pour revenir, il est tout visible. Jquery ou AJAX ne peut pas aider, c'est tout js à la fin.

Cela se passe beaucoup dans la conception de jeux en ligne. (Peut-être un peu de théorie du jeu? Pardonne-moi, j'ai un maître et j'aime mettre la théorie à utiliser :)) Comme dans crimegameonline.com, j'initialise un puzzle de mini-jeux avec PHP, en sauvegardant le tableau initial dans $ _SESSION ['foo' ]. Ensuite, j'utilise php pour [make html that] qui montre le démarrage initial du puzzle. Ensuite, js reprend, regarde les boutons et les éléments de modding xy lorsque les joueurs se déplacent. Je ne veux pas jouer au client-serveur (comme WOW) et demander au serveur 'hey, mon joueur veut se déplacer vers xy, que dois-je faire?'. C'est beaucoup de bande passante, je ne veux pas le serveur impliqué.

Et je peux simplement envoyer des POST chaque fois que le joueur fait une erreur (ou meurt). Le joueur peut bloquer les POST sortants (et modifier les jars JS locaux pour qu'il oublie le compte à terme) ou simplement modifier les données POST sortantes. OUI, les gens le feront, surtout si de l'argent réel est impliqué.

Si le jeu est petit, vous pouvez envoyer les mises à jour des messages CHAQUE déplacement (clic de bouton), 1-way, avec post vars des deux derniers mouvements. Ensuite, la sérénité du serveur vérifie le dernier et les nouveaux chats dans $ _SESSION ['allMoves']. Si le jeu est énorme, vous pouvez simplement envoyer une mise à jour "à mi-chemin" de tous les mouvements précédents et voir s'il correspond à la liste de la mise à jour finale.

Puis, après un js pense que nous avons une victoire, ajouter ou modifier un bouton pour changer de pages:

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

Ensuite, le PHP de la nouvelle page regarde $ _SESSION ['init'] et joue sur chacun des $ _SESSION ['allMoves'] pour voir si c'est vraiment un gagnant. Le serveur (PHP) doit décider s'il s'agit vraiment d'un gagnant, et non du client (js).

Vous ne pouvez pas manipuler directement une valeur de session de Javascript – elles n'existent que sur le serveur.

Vous pouvez laisser votre Javascript obtenir et définir des valeurs dans la session en utilisant les appels AJAX.

Voir également

  • Javascript et variables de session
  • JQuery cliquez sur événement pour changer la variable de session de PHP

Pas possible. Parce que JavaScript est côté client et la session est côté serveur. Pour faire tout ce qui concerne une session PHP, vous devez vous rendre sur le serveur.

Faites attention lorsque vous faites cela, car il s'agit d'un risque pour la sécurité. Les attaquants pourraient simplement injecter à plusieurs reprises des données dans les variables de session, qui sont des données stockées sur le serveur. Cela vous ouvre à quelqu'un surchargant votre serveur avec des données de session indésirable.

Voici un exemple de code que vous ne voudriez pas faire …

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

Maintenant, un attaquant peut simplement modifier la valeur de putIntoSession et soumettre le formulaire un milliard de fois. Boom!

Si vous prenez l'approche de créer un service AJAX pour ce faire, vous voudrez vous assurer de faire respecter la sécurité pour vous assurer que les requêtes répétées ne peuvent être effectuées, que vous tronquez la valeur reçue et que vous effectuez une validation de données de base .

Une simple façon de définir une variable de session est en envoyant une demande à un autre fichier PHP. Ici, il n'est pas nécessaire d'utiliser Jquery ou toute autre bibliothèque.

Je considère que j'ai un fichier index.php où je crée la variable SESSION (disons $_SESSION['v']=0 ) si SESSION n'est pas créée sinon je chargerai d'autres fichiers.

Le code est comme ceci:

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

Maintenant, dans count.html, je souhaite définir cette variable de session sur 1.

Contenu dans count.html

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

Dans count.html javascript part, envoyez une demande à un autre fichier PHP (disons setSession.php ) où je peux accéder à la variable de session.

Donc dans setSession.php in écrit

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