hoge/a.htmlからhoge/b.htmlに遷移する際にidの情報を渡すためにJavaScriptからAjaxを使ってPHPでセッションを使って渡そうと処理を書いたのですが、その際に$.ajax()を使うとセッションは切れないのですがfetch()を使うと切れてしまいます。
どうすればfetch()でも$.ajax()のようにセッションを切らさないように出来るのでしょうか。
こちらはfetchで書いたjavascriptコードです
JavaScript
1const setSession = async (id) => { 2 const resp = await fetch("php/setSession.php", { 3 method: 'POST', 4 body: `id=${id}`, 5 headers: new Headers({ 6 'Content-type': 'application/x-www-form-urlencoded' 7 }) 8 }); 9 const json = await resp.json(); 10 console.log(json.sessionId); 11} 12const getSession = async () => { 13 const resp = await fetch("php/getSession.php"); 14 const json = await resp.json(); 15 console.log(json.sessionId); 16 console.log(json.id); 17}
次は$.ajaxで書いたjavascriptコードです
javascript
1const setSession = (id) => { 2 $.ajax({ 3 url: "php/setSession.php", 4 type: "POST", 5 data: { 6 "id" : id 7 }, 8 dataType: "json" 9 }) 10 .done(json => { 11 console.log(json.sessionId); 12 }); 13} 14 15 16const getSession = () => { 17 $.ajax({ 18 url: "php/getSession.php", 19 type: "POST", 20 dataType: "json", 21 }) 22 .done(json => { 23 console.log(json.sessionId); 24 console.log(json.id); 25 }); 26}
いずれのパターンもsetSession()はhoge/a.htmlから呼び出し、getSessionはhoge/b.htmlから呼び出しますが、前者はsessionIdは一致せず、後者はsessionIdが一致します。
以下は呼び出されるphpです。
php
1<?php 2session_start(); 3 4function setSession(){ 5 $result = array('sessionId' => null); 6 if(isset($_POST['id'])){ 7 $id = $_POST['id']; 8 $_SESSION['id'] = $id; 9 session_write_close(); 10 $result['sessionId'] = session_id(); 11 } 12 return json_encode($result); 13} 14echo setSession(); 15?>
php
1<?php 2session_start(); 3 4function getSession(){ 5 $result = array('id' => null, 'sessionId' => null); 6 $result['sessionId'] = session_id(); 7 if(isset($_SESSION['id'])){ 8 $result['id'] = $_SESSION['id']; 9 } 10 return json_encode($result); 11} 12 13echo getSession(); 14 15?>
理由を知りたいのでよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/16 19:25