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

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

ただいまの
回答率

90.50%

  • PHP

    20362questions

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

特定の部分のみセッションが消えてしまいます。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 315

ponchi00

score 1

 前提・実現したいこと

入力フォームを作っていて、セッションを使用して確認ページなどを作りたい。

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

内容を次のページに渡すときに、セッションの中身が消えてしまいます。
ログインの部分は問題ありませんが、フォームに入力した内容のみ消えてしまいます。
Chromeで試すと消えますが、IEでは正常でした。

 該当のソースコード

//1.入力フォーム

<?php
session_start();//ログイン確認
if(isset($_SESSION['login'])==false)
{
    print 'ログインされていません'
    exit();
}
?>

<form  action="check.php" method="post" enctype="multipart/form-data">
    <div class="set_input">
        <input name="A" type="text">
    </div>
    <input type="submit" id="submit" value="確認する">
    <input type="reset" id="reset" value="リセット">
</form>
//2.入力した内容を確認するページ

<?php
session_start();//ログイン確認
if(isset($_SESSION['login'])==false)
{
    print 'ログインされていません'
    exit();
}


    $A=$_SESSION['A']=$_POST['A'];

    print $A//ここでは表示される
<?php
//3.確認した内容を送信するページ

session_start();//ログイン確認
if(isset($_SESSION['login'])==false)
{
    print 'ログインされていません'
    exit();
}


    $A=$_SESSION['A'];
    print $A;//表示されない

 試したこと

調べてみるとfavicon.icoによるものだとありましたので、追加してみましたが解決しませんでした。

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

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yambejp

    2018/05/28 11:16

    ページ間の相関関係がわかりません。またisset($_SESSION['login'])==falseでチェックに失敗したらログインページに飛ばして下さい

    キャンセル

  • mts10806

    2018/05/28 11:40

    サーバーでの処理なのでブラウザ間で違いがあるようには思いませんが・・・。「$A=$_SESSION['A']=$_POST['A'];」を省略した記述ではなく1つ1つ記述した場合はどうなりますか?

    キャンセル

  • ponchi00

    2018/05/28 11:50

    分けて記述してみましたが、変わりませんでした。相変わらずIEだとちゃんと内容が引き継がれています。

    キャンセル

回答 2

check解決した方法

0

大変お騒がせいたしました。
コードの別部分に変数でURLを指定していた部分が原因だったようです。

<div style="background-image:url(<?php print $sample; ?>)"></div>


該当箇所の変数を削除し、適当に文字を入れたところ、フォームで入力した内容のセッションが保持されるようになりました。
url(#)でもダメだったので、記号や空白ではダメだということなんですね。
別の指定方法を考えます。
根本的な原因はわかりませんが、一応目的の解決は致しましたので、ご報告させて頂きます。
ご回答くださった方々、ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

参考

  • login.php
<?PHP
session_start();
$_SESSION["login"]=1;
$_SESSION["test"]=1;
header("Location:x.php");
exit;
?>
  • x.php
<?PHP
session_start();
if(isset($_SESSION["login"])==false) die("error");
if(isset($_SESSION["test"])) $_SESSION["test"]++;
print_r($_COOKIE);
?>
<form  action="y.php" method="post">
<input name="a" type="text">
<input type="submit" value="go">
</form>
  • y.php
<?PHP
session_start();
if(isset($_SESSION["login"])==false) die("error");
$a=filter_input(INPUT_POST,"a");
if(is_null($a) or $a===""){
  unset($_SESSION["a"]);
}else{
  $_SESSION["a"]=$a;
}
if(isset($_SESSION["test"])) $_SESSION["test"]++;
print_r($_SESSION);
print_r($_COOKIE);
?>
<hr>
<a href="z.php">z</a>
  • z.php
<?PHP
session_start();
if(isset($_SESSION["login"])==false) die("error");
if(isset($_SESSION["test"])) $_SESSION["test"]++;
print_r($_SESSION);
print_r($_COOKIE);
?>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/28 12:40 編集

    教えていただいたコードを参考に記述してみましたが、Chromeだとprint_r($_SESSION);の結果が消えてしまいます。IEでは保持されたままでした。原因はなにでしょうか?
    消えるのはz.phpの段階です。

    キャンセル

  • 2018/05/28 12:43

    $_SESSION["login"]も消えていますか?
    であれば、chromeの設定でクッキーを拒否してたりしませんか?
    (サンプル更新します)
    $_SESSION["login"]は参照できて、$_SESSION["a"]は参照できないとなると
    ちょっと詳しく調べないとわからないですね

    キャンセル

  • 2018/05/28 12:44

    loginは残っています。フォームで入力した内容のみ消えてしまいます。

    キャンセル

  • 2018/05/28 12:45

    クッキーのセッションIDはどうでしょう?

    キャンセル

  • 2018/05/28 12:57

    セッションIDはどのページも同じでした。
    今気が付いたのですが、Chromeだとprint_r($_SESSION);の結果のArray ( [login] => 1の部分の[a]自体消えてしまっています。これもなにか変なのでしょうか?

    キャンセル

  • 2018/05/28 13:07

    上記追記しました
    testの値がページ遷移ごとにインクリメントされますか?

    キャンセル

  • 2018/05/28 13:36

    インクリメントはされましたが、ChromeとIEで結果が違いました。
    Chromeでは5、IEでは4という結果になりました。

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    postのnameを複数同じの時の値取得方法

    前提・実現したいこと php初心者です。 郵便番号、住所検索を作成しています。 ここに質問したいことを詳細に書いてください form(真ん中)で、住所検索で取得した内容を、 別

  • 解決済

    【PHPmySQL】チェックボックス・フリーワードでの検索条件の絞り込み方法

    PHPmySQLでデータベースの検索結果を出力したいです。 接続はPDOで行いました。テーブル\(適当\)の画像は下に貼っておきます。 下記コードでは、フリーワードで入力した値

  • 解決済

    クイズのプログラム作成に苦戦しています。

    PHPで回答した答えを表示するプログラムを作成しています。 望みとしてはshow_form部分で文字列を送信してnameを受けとると再度show_formを表示し GETに送信

  • 受付中

    セッションへ保存するための処理について

    [数量入力ページ]にて商品の数量を入力し、[結果ページ]へ遷移後、数量追加ボタンにて[数量入力ページ]へ戻り、 再度、数量追加を行える仕様にしたいと考えております。 また、数量

  • 解決済

    ページ遷移での値保持について

    PHP初心者です 現在商品数が180件程度のカタログサイトを作っています。 以前質問させていただいて、優しい方のお陰でページング機能を追加することができました。 しかしここで、

  • 解決済

    ログイン情報をクッキー平文で保持させないようにするには

    ログイン情報をクッキーで保持させるように実装しています。 現状では下記のようなコードなのですが、これだとクッキーに平文でE-mailとパスワードが見えてしまいます。 こういう場

  • 解決済

    PHPでダイアログ(警告)表示

     実現したいこと ログインに失敗した際に、ダイアログで「nameまたはpasswordを間違えています。」と表示したい。  現在のソースコード index.php(ログインの画

  • 解決済

    php ログインできなくなる

     前提・実現したいこと phpでログインシステムを実装中に以下のエラーが発生しました。  発生している問題・エラーメッセージ Warning: session_start():

同じタグがついた質問を見る

  • PHP

    20362questions

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