ページに日付、曜日、時間などのリンクがあります。誰かが「日付」をクリックしたら、セッションを開始します。そして、同じように「日」をクリックすると、前のセッションが停止し、新しいセッションが作成されます。これは可能ですか?
1 に答える
これにセッションを使用する理由はわかりませんが、AJAX では可能です。
2 つのリンクを定義します。たとえば、start と stop と呼びましょう。
<a id="start">Start</a>
<a id="stop">Stop</a>
次に、Javascript を使用して (この例ではjQuery ライブラリsession_start()
を使用します)、適切にorを呼び出すバックエンド ハンドラーに要求を行いsession_stop()
ます。後で何らかの作業を行う必要がある場合は、(オプションで) ユーザーのセッションを停止したときにシリアル化できます。
まず、AJAX リクエストの例です。このページでは、ユーザーのセッションを開始または終了する非同期要求を作成する共通関数を呼び出すイベントを確立する必要があります。これは、DOM の準備ができたら実行される無名関数を作成することによって行います。
<script>
$(document).ready(function() {
// Make the request to start or stop a session
function asyncSessionMolester(uri, val) {
$.ajax({
url: uri
type: 'post',
dataType: "json",
cache: false,
data: {
'action':session,
'value':val
},
success: function(remoteResponse, textStatus) {
alert('Session now in mode ' + toggle);
// do other stuff you want to do on success
},
error: function(xhr, desc, err) {
// There is a lot more data in xhr, this just shows what the server
// wrote to the browser in the console for debugging.
// Handle failure here
console.log(xhr.textResponse);
}
});
// now, our events:
$('#start').click(function() {
asyncSessionMolestor('/ajax.php', 'start');
});
$('#stop').click(function() {
asyncSessionMolestor('/ajax.php', 'stop');
});
});
</script>
/ajax.php
ここで、に存在し、次のことを行うPHP を作成する必要があります。
- セッションが確立された場合に、ユーザーがそれを要求する権限を持っていることを確認してください
- ヘッダーを確認します。
HTTP_X_REQUESTED_WITH
ヘッダーが存在しない場合は、誰かがブラウザー経由で直接アクセスしています (存在する場合は救済します)。 action
との POST データを確認してくださいvalue
。アクションが値にあるsession
場合switch()
。の場合start
、セッションを開始します。その場合stop
は、セッションを停止してください。- ajax 呼び出しで調べることができる JSON 応答を送り返します
後で分析したり作業を呼び出したりするためにセッションを保存する必要がある場合serialize($_SESSION)
、またはセッションjson_encode($_SESSION)
を破棄する前に保存する必要がある場合。
警告:
成功を適切に処理する必要があります。ユーザーは、セッションがなくなったことを知る必要があります。おそらく成功時のリダイレクト。また、障害を適切に処理する必要があります。大まかな例を挙げただけです。
セッションを開始する前に、セッションを開始するコードに何も出力しないでください。
あなたはおそらく自分のようにセッションを使用したくないでしょうが、それが可能かどうか尋ねたところ、実際に使用されています。
コードはテストされておらず、例として示されています。
この例では、セキュリティは示されていません。少なくとも、ある種の CSRF 保護が必要であり、もちろん入力をサニタイズします。
編集
状態に応じて同じリンクを開始/停止する場合は、変数を設定して追跡することができます。
<script>
$(document).ready(function() {
var state = false;
... ajax stuff as above
$('#date').click(function() {
switch(state) {
case true:
// We successfully created or recreated a session
asyncSessionMolester('/ajax.php', 'stop');
break;
case false:
// User has not yet created a session
asyncSessionMolester('/ajax.php', 'start');
break;
}
});
});
</script>
ID が のリンクは 1 つだけですdate
。state
呼び出しの成功に応じて、AJAX 関数が変数を更新する関数であることを確認してください。これは非同期であることを覚えておいてください。おそらく、ユーザーが満足してクリックできないようにする必要があります。
そうすることで、あなたが行きたい方向に進むことができるはずです。あるいは、それが良い考えではない理由を説明することもできます。しかし、それはそれを達成するための 1 つの方法です。