web-dev-qa-db-ja.com

PHPでjavascriptを使用してセッション変数を設定する

Javascriptを使用してPHPセッション変数を設定できますか?

36
Sanjay Khatri

JavaScriptの場合:

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

session_write.phpファイル内:

<?
session_start();

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

HTMLの場合:

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

セッションはサーバー側に保存されるため、JavaScriptから値を追加することはできません。クライアント側で取得できるのは、IDを含むセッションCookieだけです。 1つの可能性は、セッション変数を設定するサーバー側スクリプトにAJAXリクエストを送信することです。jQueryの .post() メソッドの例:

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

もちろん、このようなスクリプトを公開する場合は注意が必要です。

19
Darin Dimitrov

永続データのクライアント側での操作を許可する場合は、Cookieを使用することをお勧めします。それがクッキーの設計目的です。

8
Lèse majesté

または、純粋なjsによるStackOverflowも参照してください。 フォーム送信のようなJavaScript投稿リクエスト

しかし、なぜjsで$ _sessionを設定しようとしますか? JS変数は、サードパーティツール(firebug)を使用してプレイヤーが変更できるため、どのプレイヤーも$ _session []を変更できます!そしてPHPがjsに秘密のコード(または[ローリング]暗号化)を返すことはできません。すべて表示されます。JqueryまたはAJAX最終的にはすべてjsです。

これは、オンラインゲームの設計で多く発生します。 (たぶん少しのゲーム理論?私を許して、私はマスターがいて、理論を使用するのが好きです:))crimegameonline.comのように、PHPでミニゲームパズルを初期化し、初期ボードを$ _SESSION ['foo'に保存します]。次に、phpを使用して[最初のパズルの開始を示すHTMLを作成します]。次に、jsが引き継ぎ、ボタンを見て、要素xyを修正してプレーヤーが動きます。クライアントサーバー(WOWなど)を再生したくないので、サーバーに「ちょっと、プレーヤーはxyに移動したいのですが、どうすればよいですか?」帯域幅が大きいため、サーバーが関与することは望ましくありません。

そして、プレーヤーがエラーを起こす(または死ぬ)たびにPOSTを送信できます。プレーヤーは発信POSTをブロックする(およびローカルJS変数を変更して発信カウントを忘れさせる)か、単に発信POSTデータを変更します。はい、特に実際のお金が関係する場合はこれを行います。

ゲームが小さい場合は、1回の移動(ボタンクリック)ごとに、最後の2つの移動の投稿変数を使用して、投稿の更新を送信できます。次に、サーバーの健全性チェックが最後に行われ、$ _ SESSION ['allMoves']で新しい猫が確認されます。ゲームが大規模な場合は、先行するすべての動きの「中間」更新を送信し、最終更新のリストで一致するかどうかを確認できます。

次に、jsが勝ちだと思った後、ページを変更するボタンを追加または変更します。

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

次に、新しいページのPHPは$ _SESSION ['init']を見て、各$ _SESSION ['allMoves']を再生して、本当に勝者かどうかを確認します。サーバー(PHP)クライアント(js)ではなく、本当に勝者かどうかを判断する必要があります。

3
dako

Javascriptからセッション値を直接操作することはできません-それらはサーバー上にのみ存在します。

ただし、AJAX呼び出しを使用して、セッションでJavascriptに値を取得および設定させることができます。

こちらもご覧ください

1
Paul Dixon

セッション変数を設定する簡単な方法の1つは、別のPHPファイルにリクエストを送信することです。ここでは、Jqueryまたは他のライブラリを使用する必要はありません。

SESSION変数を作成しているindex.phpファイル(たとえば$_SESSION['v']=0SESSIONが作成されていない場合は、他のファイルをロードします。

コードは次のとおりです。

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

count.htmlでこのセッション変数を1に設定します。

count.htmlのコンテンツ

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

count.html javascriptパートで、別のPHPファイル(たとえばsetSession.php)ここで、セッション変数にアクセスできます。

setSession.phpで書き込みます

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

これはセキュリティ上のリスクがあるため、注意してください。攻撃者は、サーバーに保存されているデータであるセッション変数にデータを繰り返し挿入する可能性があります。これにより、ジャンクセッションデータでサーバーに過負荷をかけることになります。

したくないコードの例を次に示します。

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

現在、攻撃者はputIntoSessionの値を変更して、フォームを10億回送信するだけです。ブーム!

これを行うためにAJAXサービスを作成するアプローチをとる場合は、セキュリティを強化して、繰り返しリクエストが行われないようにすることを確認する必要があります。値を受け取り、いくつかの基本的なデータ検証を行います。

0
Payam Azadi

ありえない。 JavaScriptはクライアント側であり、セッションはサーバー側であるためです。 PHPセッションに関連する何かを行うには、サーバーに移動する必要があります。

0
Ms_Lucky13

Ajaxを使用してこの質問を解決しました。私がやることは、渡される値がセッションで保存されるPHPページへのajax呼び出しを行うことです。

ここで紹介する例は、データテーブルに表示するアイテム数の値を変更すると、その値がセッションに保存されることです。

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

GuardarNumElems.phpは次のとおりです。

<?php    
    session_start();

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