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

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

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

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

Q&A

2回答

2347閲覧

セッション変数の値が消える

boooonsai

総合スコア6

PHP

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

0グッド

0クリップ

投稿2020/07/10 08:43

編集2022/01/12 10:55

お世話になります。
PHPで会員サイトを作ることが多いのですが、ログインした会員は、セッション変数に会員情報を与え、ページを遷移し、会員認証はそのセッション変数に与えられた値を参照し、記事を投稿する際は、そのセッション変数にある値を記事の投稿者としてレコードに代入しています。

このような感じです。
ログイン時

<?php session_start(); //中略、DB接続語、パラメータの元に会員データを参照 //該当する会員がいたら $_SESSION["no"] = $row["no"] $_SESSION["name"] = $row["name"] //としセッション変数にセット

記事投稿ページ

<?php session_start(); if(!ctype_digit($_SESSION["no"])){ //セッション変数を確認。ログインしているか?をここで確認している。 $home_url = "https://example.com"; header("Location: $home_url"); exit; } else{ //DB接続 $no = $_SESSION["no"]; $text = $mysqli->real_escape_string($_POST["text"]); //投稿するデータとしてポストされたを検証し・・ // SQL文の作成 $query = "INSERT INTO member (id, no, name, message) VALUES (?, ?, ?, ?)"; $stmt = $mysqli->prepare($query); // パラメータを設定 $stmt->bind_param("isss", $auto_increment, $no, $name, $text); $stmt->execute(); $stmt->close(); }

といった流れでデータを登録しています。

セッション変数にあるデータが適正なものか?の検証は端折っていますが、この仕組みだと、まれにセッション変数にあるべく整数がなくなっており、整数が代入されているはずの$_SESSION["no"]に値がないのか、登録された後のデータをみると、0が登録(int型なので)されていることを見かけます。

まだまだ仲間内のサイトであるため、大きな問題にはなっていませんが、このような現象、どこに問題があるのでしょうか?

ご指導いただけると幸いです。
よろしくお願い申し上げます。

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

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

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

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

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

guest

回答2

0

$no=$_SESSION["no"];
と変数にもどす処理が抜けてませんか?

投稿2020/07/10 09:05

yambejp

総合スコア114585

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

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

boooonsai

2020/07/10 12:30

yambejpさま アドバスをありがとうございます。 ご指摘の箇所、質問時に抜けていました。実際のソースには記述があります。申し訳ありません。修正しておきます。 しかし、変数に戻しているものの、たまにですが、変数にあるはずの値が抜けて、insert該当カラムには0が登録されてしまうのです。何か考えられる理由はないでしょうか? 引続きアドバイス、頂戴できれば幸いです。
guest

0

php.ini にセションの有効期限の秒数を設定する箇所があります。
session.gc_maxlifetime = 1440

デフォルトで1440秒経過すると、セション変数の内容が消えると思います。
session.gc_maxlifetimeの設定を大きくしてみてはどうでしょうか?

投稿2020/07/10 08:50

makotokw

総合スコア24

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

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

boooonsai

2020/07/10 08:59

makotokwさま 早々のアドバイスをありがとうございます! 説明が不足していましたが、時間が空いていなくてもこのようなセッション変数が抜ける?現象を確認しています。 少し具体的にお話しすると、連続しての投稿された形跡があったのですが、2分もかかっていない投稿にも拘らず、セッション変数が抜けている(insertされたデータが0になる)現象を確認しています。 なので、私のコードに重大な見落としがあるのでは?と。そんなつもりで質問した次第です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問