web-dev-qa-db-fra.com

Définir la variable de session à l'aide de javascript dans PHP

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

35
Sanjay Khatri

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>
27
BGabesz

La session est stockée côté serveur, vous ne pouvez donc pas y ajouter de valeur à partir de JavaScript. Tout ce que vous obtenez du côté client est le cookie de session qui contient un identifiant. Une possibilité serait d'envoyer une demande 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' });

Évidemment, vous devriez faire preuve de prudence lorsque vous exposez un tel script.

18
Darin Dimitrov

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

7
Lèse majesté

ou par pure js, voir aussi sur StackOverflow: Demande de publication JavaScript comme un formulaire d'envoi

MAIS POURQUOI essayer de définir $ _session avec js? toute variable JS peut être modifiée par un joueur avec des outils tiers (firebug), ainsi tout joueur peut modifier la $ _session []! Et PHP ne peut donner à js aucun code secret (ou même [chiffré] crypté) à renvoyer, tout est visible. JQuery ou AJAX ne peuvent pas aider, c'est tout js à la fin.

Cela arrive souvent dans la conception de jeux en ligne. (Peut-être un peu de la théorie des jeux? Pardonnez-moi, j'ai un maître et aime mettre la théorie à utiliser :)) Comme dans crimegameonline.com, je. 'foo'] . Ensuite, j'utilise php pour [rendre le html qui] montre le début du puzzle initial. Ensuite, js prend le relais en observant les boutons et en modulant l’élément xy pendant que les joueurs se déplacent. Je ne veux PAS jouer client-serveur (comme WOW) et demander au serveur "hé, mon joueur veut passer à xy, que dois-je faire?". C'est beaucoup de bande passante, je ne veux pas du serveur impliqué. 

Et je peux juste envoyer des POST chaque fois que le joueur commet une erreur (ou meurt). Le joueur peut bloquer les POST sortants (et modifier les vars JS locaux pour lui faire oublier le décompte des sorties) ou simplement modifier les données POST sortantes. OUI, les gens vont le faire, surtout s'il s'agit d'argent réel.

Si le jeu est petit, vous pouvez envoyer des mises à jour après chaque mouvement (clic de bouton), dans un sens, avec les vars de publication des deux derniers déplacements. Ensuite, l’état de santé du serveur est vérifié et les chats nouveaux dans un $ _SESSION ['allMoves']. Si le jeu est volumineux, vous pouvez simplement envoyer une mise à jour "à mi-chemin" de tous les mouvements précédents et voir si cela correspond dans la liste de la mise à jour finale.

Ensuite, après un js pense que nous avons une victoire, ajoutez ou modifiez un bouton pour changer de page:

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

Ensuite, la nouvelle page PHP examine $ _SESSION ['init'] et joue dans chacun des fichiers $ _ SESSION ['allMoves'] pour voir si elle gagne réellement. Le serveur (PHP) doit décider si c'est vraiment un gagnant, pas le client (js).

3
dako

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

Vous pouvez toutefois laisser votre code JavaScript obtenir et définir les valeurs de la session en utilisant les appels AJAX.

Voir également

1
Paul Dixon

Un moyen simple de définir une variable de session consiste à envoyer la demande à un autre fichier PHP. Ici, pas besoin d’utiliser Jquery ou une autre bibliothèque.

Considérez que j'ai index.php fichier où je crée la variable SESSION (disons $_SESSION['v']=0) si SESSION n'est pas créé, sinon je chargerai un autre fichier.

Le code est comme ça:

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

Maintenant, dans count.html Je veux 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 à une variable de session.

Donc, dans setSession.php écrira

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

faites attention en faisant ceci, car c'est un risque de sécurité. Les attaquants pourraient simplement injecter des données à plusieurs reprises dans des variables de session, qui sont des données stockées sur le serveur. Cela vous ouvre la porte à une personne surchargeant 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"]
?>

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

Si vous créez un service AJAX pour le faire, vous devez vous assurer que vous appliquez la sécurité pour vous assurer que des demandes répétées ne peuvent pas être effectuées, que vous tronquez la valeur reçue et que certaines données de base de validation.

0
Payam Azadi

Pas possible. Parce que JavaScript est côté client et que la session est côté serveur. Pour faire quoi que ce soit lié à une session PHP, vous devez vous rendre sur le serveur.

0
Ms_Lucky13

J'ai résolu cette question en utilisant Ajax . Ce que je fais est de faire un appel ajax à une page PHP où la valeur transmise sera sauvegardée en session.

L'exemple que je vais vous montrer, ce que je fais, c'est que lorsque vous modifiez la valeur du nombre d'éléments à afficher dans un objet datable, cette valeur est enregistrée en session.

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

Et le GuardarNumElems.php est comme suit:

<?php    
    session_start();

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