質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

10229閲覧

Ajaxの先でセッションが取得できない

nekutarin

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/04/24 00:45

編集2019/04/24 00:47

前提・実現したいこと

PHPでセッションを取得しようとしています。
Ajaxの先でセッションが取得できない状況に陥りました。
ご指導ご鞭撻のほど、よろしくお願い申し上げます。

発生している問題・エラーメッセージ

Ajaxの先でセッションが取得できません。

エラーメッセージはありません。

該当のソースコード

まずセッションの登録と出力はできます。
↓「index.php」

PHP

1<?php 2session_start(); 3$_SESSION['user_ids'] = array('1','2'); 4var_dump( $_SESSION['user_ids'] ); // できます。 5?>

しかしAjax先の「fuga.php」でそれが取得できません。
↓「fuga.php」

PHP

1$user_ids = $_SESSION['user_ids']; // できません。

下記のようにして「// sessionの引き継ぎ」を行っているつもりですが、できません。
ほかに必要な手立てはございますでしょうか?
↓「ajax.js」

JS

1$.ajax({ 2 url: "fuga.php", 3 type: 'POST', 4 data: { 5 //session_value: session_value, // 後述の「試したこと」でこれが活きます。 6 }, 7 beforeSend: function(xhr) { 8 // sessionの引き継ぎ 9 xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); 10 }, 11 success: function(result){ 12 console.log(result); 13 }, 14 error: function(){ 15 console.log( jqXHR, textStatus, errorThrown, arguments ); 16 }, 17});

試したこと

JSにセッションを出力してAjaxで送れば「fuga.php」で取得できます。

つまり「index.php」を下記の(改)のようにして、JSにセッションを出力し、「ajax.js」では上のコメントアウトしてある「//session_value: session_value」を送る。という流れならば、「fuga.php」で取得できるというわけです。

↓「index.php」(改)

PHP

1<?php 2session_start(); 3$_SESSION['user_ids'] = array('1','2'); 4?> 5 6<script> 7<!-- 8var session_value = <?php echo json_encode($_SESSION[['user_ids']); ?>; 9--> 10</script> 11

しかし、ユーザーIDというフロントで見せたくない値のため、このようにJSで「session_value」を表示したくありません。

なんとかして「fuga.php」で、セッション「user_ids」を取得できませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ajaxで実行されるfuga.phpにてsession_start()が宣言されていないからでは?

投稿2019/04/24 00:56

m.ts10806

総合スコア80842

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekutarin

2019/04/24 01:18

・・・・・・・それでした。どうもありがとうございます。
m.ts10806

2019/04/24 01:21

解決されたようで何よりです。 セッションを使う全てのファイル冒頭に書こうとすると忘れるので共通ファイルに書いておき、そのファイルを冒頭でincludeするようにしておくと漏れが減るかもしれません。
nekutarin

2019/04/24 01:24

なるほど。勉強になります。ご丁寧にありがとうございます。
guest

0

以下で動作確認ください

  • index.php

PHP

1<?php 2session_start(); 3$_SESSION["s"]=[1,2]; 4?> 5<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 6<script> 7$(function(){ 8 $.ajax({ 9 url:"fuga.php", 10 }).done(function(data){ 11 console.log(data); 12 }); 13}); 14</script>
  • fuga.php

PHP

1<?PHP 2session_start(); 3print_r($_SESSION); 4print_r($_COOKIE);
  • 出力

console

1Array 2( 3 [s] => Array 4 ( 5 [0] => 1 6 [1] => 2 7 ) 8) 9Array 10( 11 [PHPSESSID] => xxxxxxxxx 12)

※特にcookieでPHPSESSIDが渡されているかが重要

投稿2019/04/24 01:11

yambejp

総合スコア114747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekutarin

2019/04/24 01:20

session_start() がなかったせいでした。ご回答は今後のテストの参考にさせて頂きたいと思います。ご迷惑をおかけして申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問