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

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

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

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

解決済

1回答

1661閲覧

【PHP】本番環境でセッションに値が保持されない

Takekazu-Ban

総合スコア1

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

2クリップ

投稿2022/01/10 12:26

前提・実現したいこと

PHPでECサイトを制作しています。
セッション($_SESSION)についてなのですが、
ユーザのログイン後の$_SESSION["user_login"]、$_SESSION["user_name"]、$_SESSION["user_id"]が保持されず、値がnullになります。
なお、ローカル環境では、問題なかったのですが、本番環境に移行してから発生致しました。
各セッションに値を保持したいです。
解決方法などご教授お願いします。

[システムの流れ]
ログイン(ユーザ)入力 
↓  ↓  ↓
ログイン入力チェック(user_login_check.php)に移行
↓  ↓  ↓ (入力が正しい場合、各セッションに値を代入)
商品一覧画面に移行
ヘッダー部分(header.php)にログイン状況表示

■現状の結果
ログイン入力チェックでセッションの値は、代入されるが、セッションの値は保持されず,商品一覧画面に移行後、ヘッダー部分に「ログインしていません。」と表示される。
■期待する結果
ログイン入力チェックでセッションの値は、代入され、セッションの値は保持したまま,商品一覧画面に移行後、ヘッダー部分に「〇〇さんログイン中」と表示される。

該当のソースコード

[user_login_check.php] <!-- ログインチェック画面 --> <!-- ヘッダー呼出 --> <?php include("../common/header.php"); ?> <div class="main-center"> <body> <?php require_once '../common/functions.php'; // 関数呼出 /* XSS対策 */ $user_info = sanitize($_POST); $user_email = $user_info["user_email"]; $user_pass = $user_info["user_pass"]; $judge = true; /* DBから会員選択呼出 */ $dbh = db_open(); // DB接続 $stmt = $dbh->prepare("SELECT user_pass, user_id, user_name FROM users WHERE user_email = :user_email"); $stmt->bindParam(':user_email', $user_email, PDO::PARAM_STR); $stmt->execute(); // SQL実行 $dbh = null; // DB切断 $rec = $stmt->fetch(PDO::FETCH_ASSOC); /* バリデーションチェック(省略) */                 /* ログインが成功した場合、各セッションに値を代入 */ if (password_verify($user_pass, $rec["user_pass"])) { session_start(); $_SESSION["user_login"] = 1;  // ログインセッション有りにする $_SESSION["user_name"] = $rec["user_name"];  // メールアドレスと紐づく名前をセッションに代入 $_SESSION["user_id"] = $rec["user_id"];  // // メールアドレスと紐づくidをセッションに代入 echo <<<EOF<script>location.href='https://***/ec_shop/shop_list.php'</script>EOF;    // 商品一覧画面に移行 } /* エラーメッセージ表示(省略)*/ ?> </body> </div> <!-- フッター表示 --> <?php include("../common/footer.php"); ?>
[header.php] <!-- ヘッダー部分 --> <!-- Bootstrap CSS --> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"> <!-- Bootstrap Javascript(jQuery含む) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale-1.0"> <title>ECサイト</title> <link rel="stylesheet" href="../css/style.css"> </head> <?php ini_set("display_errors", "Off"); ?> <!-- ヘッダー表示 --> <header> <?php $url = $_SERVER['REQUEST_URI']; // 現在のURLを取得 session_start(); session_regenerate_id(true); ?> <!-- ホームボタン表示(省略) --> <!-- ※以下のログイン表示でセッションが保持されている場合、ログイン情報が表示される --> <!-- ログイン表示 --> <div class="login-juge"> <?php /* ログインセッション判定(ヘッダー表示) */ if ((strstr($url, 'admin') || strstr($url, 'product'))) { // 管理者画面の場合  // (省略) } else { // ユーザ画面の場合 if (!((strstr($url, 'login')) || (strstr($url, 'sign_up')))) { if ((isset($_SESSION["login"]) === false) && (isset($_SESSION["user_login"]) === false)) { $logout_msg = "ログインしていません。<br>"; echo "<font color=\"red\">$logout_msg</font>"; } else { $login_msg = "<span class='glyphicon glyphicon-user' aria-hidden='true'></span>". " "; $login_msg .= $_SESSION['user_name'].'さんログイン中'. '<br>'; echo "<font color=\"white\">$login_msg</font>"; } } } ?> </div> <!-- ログアウトボタン(省略) --> <!-- カート表示ボタン表示(省略) --> <!-- マイページ表示(省略) --> </header> <div class="main"> <?php /* ログインセッション判定(フッター表示) */ if (strstr($url, 'admin') || strstr($url, 'product')) { if (!strstr($url, 'login')) { if(isset($_SESSION["login"]) === false) { echo "<div class='main-center'></div>"; include("../common/footer.php"); exit(); } } } ?>
[php80.ini] cgi.force_redirect = 0; date.timezone = Asia/Tokyo engine = On short_open_tag = On asp_tags = Off precision = 14 y2k_compliance = Off output_buffering = On output_handler = zlib.output_compression = Off implicit_flush = Off safe_mode = Off safe_mode_exec_dir = public_html safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH disable_functions = highlight.string = #CC0000 highlight.comment = #FF9900 highlight.keyword = #006600 highlight.bg = #FFFFFF highlight.default = #0000CC highlight.html = #000000 expose_php = On max_execution_time = 300 ; Maximum execution time of each script, in seconds max_input_time = 600 ; Maximum amount of time each script may spend parsing request data memory_limit = 500M ; Maximum amount of memory a script may consume (8MB) error_reporting = 0 display_errors = Off display_startup_errors = Off log_errors = Off track_errors = Off warn_plus_overloading = Off variables_order = "EGPCS" register_argc_argv = On post_max_size = 1000M gpc_order = "GPC" magic_quotes_runtime = Off magic_quotes_sybase = Off auto_prepend_file = auto_append_file = default_mimetype = "text/html" doc_root = user_dir = extension_dir = "/usr/local/lib/php/extensions/" enable_dl = On file_uploads = On upload_max_filesize = 1000M allow_url_fopen = On define_syslog_variables = Off SMTP = localhost sendmail_from = me@localhost.com sendmail_path = /usr/sbin/sendmail -t -i sql.safe_mode = Off odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 mysql.allow_persistent = On mysql.max_persistent = -1 mysql.max_links = -1 mysql.default_port = mysql.default_socket = mysql.default_host = mysql.default_user = mysql.default_password = msql.allow_persistent = On msql.max_persistent = -1 msql.max_links = -1 pgsql.allow_persistent = On pgsql.max_persistent = -1 pgsql.max_links = -1 sybase.allow_persistent = On sybase.max_persistent = -1 sybase.max_links = -1 sybase.min_error_severity = 10 sybase.min_message_severity = 10 sybase.compatability_mode = Off sybct.allow_persistent = On sybct.max_persistent = -1 sybct.max_links = -1 sybct.min_server_severity = 10 sybct.min_client_severity = 10 bcmath.scale = 0 ifx.default_host = ifx.default_user = ifx.default_password = ifx.allow_persistent = On ifx.max_persistent = -1 ifx.max_links = -1 ifx.textasvarchar = 0 ifx.byteasvarchar = 0 ifx.charasvarchar = 0 ifx.blobinfile = 0 ifx.nullformat = 0 session.save_handler = files session.save_path = /tmp session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.serialize_handler = php session.gc_probability = 1 session.gc_maxlifetime = 1440 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 1 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" mssql.allow_persistent = On mssql.max_persistent = -1 mssql.max_links = -1 mssql.min_error_severity = 10 mssql.min_message_severity = 10 mssql.compatability_mode = Off ingres.allow_persistent = On ingres.max_persistent = -1 ingres.max_links = -1 ingres.default_database = ingres.default_user = ingres.default_password = pfpro.defaulthost = "test.signio.com" pfpro.defaultport = 443 pfpro.defaulttimeout = 30 sockets.use_system_read = On mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.detect_order = auto zend_extension=/usr/local/lib/php/extensions/php80_opcache.so opcache.enable=1 opcache.memory_consumption=64 opcache.interned_strings_buffer=8 opcache.revalidate_freq=10 opcache.fast_shutdown=1

試したこと

「php80.ini」の「output_buffering=Off]を "On"と"4096"に変更
「php80.ini」の以下の設定確認
"session.cookie_lifetime",
"session.gc_maxlifetime",
"session.gc_divisor",
"session.save_path",
"session.save_handler",
"session.use_strict_mode"

補足情報(FW/ツールのバージョンなど)

サーバ:XREA
PHP Version:8.0.3

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

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

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

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

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

guest

回答1

0

自己解決

「php80.ini」の「session.auto_start」を"0"から"1"に変更することで解決致しました。

投稿2022/01/10 14:08

Takekazu-Ban

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問