• ベストアンサー

たまに$_REQUESTの値が消える

携帯サイトを開発しており、自身では煮詰まってしまった為質問させていただきます。 携帯サイトのためsessionを使用せず、認証(一応閉ざしたサイトです)にはREQUESTでキーになる値を常に次のページに渡しながらログイン状態を維持させています。 ところがREQUESTで同じKEYを渡しているにもかかわらず、ログイン状態が維持されなくなってしまいます。 維持されなくなったときの状態としては、URLに通常ならhttp://****.com/index.html?let=abc →abcがログインの為のキー。 となっているのに http://****.com/error.html?SID となってしまっています。 error.htmlはエラー用ページですので動きとしては正しいです。 REQUESTで渡しているkeyはいつも同じであり、タイミングによってログイン状態が維持されたりしなかったりで原因がつかめず困っています。 対象ディレクトリの.htaccessファイルには下記の設定をしています。 php_flag session.use_trans_sid Off php_flag session.use_cookies On php_flag session.use_only_cookies On php_flag session.auto_start Off (これらの設定を入れる前からエラーは発生しましたが) なにか原因がお分かりになる方、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

読み飛ばしてました、session.use_trans_sid Off なんですね。 > はい、自動生成です。 質問が曖昧でしたが、これはどういう意味ですか? リンクにパラメータを自動付加するなんとかいう設定(忘れました) のことではなくで値は作ってるってことですかね。 通常のURLにSIDはないのにどうしてSIDがついてくるのか 仕様がよく分からなかったもので。 > POST送信時にGETのクエリが消える機種 はSoftBank社名変更の頃にありましたが、最近のは分かりません。 それでも100%起こる現象だったので違う気がします。 何の力にもなってませんが、遷移時の状態をチェックして 100%近く起こる条件を頑張って見つけてくださぃ。。

wf3255
質問者

お礼

>質問が曖昧でしたが、これはどういう意味ですか? >リンクにパラメータを自動付加するなんとかいう設定(忘れました) >のことではなくで値は作ってるってことですかね。 いえ、自動付加する設定です。 今回の問題はセッションIDをトップページアクセス時にセッション変数に格納し、その値をページ間にまたがって持ち続けさせることで解決いたしました。 REQUESTで認証keyを受け渡すやり方をやめたという結論です。 親身になっていただき、とても耳寄りなアドバイスをありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

全く同じ遷移でたまに、だとちょっと分からないですが・・ 認証に時間要素を入れているわけでもないのですよね? ?SIDは自動生成でしょうか? あとは、POST送信時にGETのクエリが消える機種はありましたが・・

wf3255
質問者

補足

アドバイスありがとうございます。 >認証に時間要素を入れているわけでもないのですよね? 認証に時間要素は入れていません。 >SIDは自動生成でしょうか? はい、自動生成です。 >あとは、POST送信時にGETのクエリが消える機種はありましたが・・ 現状はこの可能性が最も高いです。 POSTとREQUESTを同時に投げている遷移でREQUESTが消えてしまうことが非常に多いです(100%ではないので微妙なのですが)。

全文を見る
すると、全ての回答が全文表示されます。
noname#87667
noname#87667
回答No.1

携帯サイトの場合、セッション情報を維持するためにSIDをクエリストリングに含める必要があったような気がします。現場を離れてしまったので、詳細は忘れてしまいましたが、このサイトを参考にしてみてください。 http://www.y2sunlight.com/water/webman/php2/2E.html

wf3255
質問者

補足

ご回答ありがとうございます。 もし常にSIDがURLについてしまうのであればセッションでの管理方法で行きたいのですが、REQUESTのデータで正常に遷移することも半分くらいあるので、これといった決定打(解決策)がないのです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • さくらインターネットで500Internal Error

    http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000044 さくらインターネット初心者です。 これまでロリポで使っていたスクリプトをさくらにそのままそっくり移動したところ500エラーでした。 原因を探るべく、hello worldを作ってUPしたところ、.htaccessがあるとエラーが起こることがわかりました。もちろんパーミションもさくらにあわせて実行しました。 .htaccessの中身 Options -Indexes DirectoryIndex index.php <Files ~ "\.(db|log|ini)$"> Deny from all </Files> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) index.php/$1 </IfModule> php_flag register_globals off php_flag magic_quotes_gpc off php_value default_charset UTF-8 php_value mbstring.input_encoding pass php_value mbstring.internal_encoding UTF-8 php_value mbstring.output_encoding pass php_value mbstring.language Japanese php_value mbstring.substitute_character none php_flag session.use_trans_sid Off php_flag session.use_cookies On php_flag session.use_only_cookies On php_flag session.auto_start Off php_value session.cache_limiter none php_value error_reporting 039 php_flag display_errors Off php_flag display_startup_errors Off php_flag log_errors On php_value error_log "./error.log" なぜ上記、エラーが起きてしまったのでしょうか?ご存知の方いたら訓えてください。

    • ベストアンサー
    • PHP
  • Cookie非使用のセッションについて

    携帯サイトを作成しているので、URLに直接IDを埋め込む形でセッションさせたいのですが、うまくいきません。 レンタルサーバ(heteml)には『php.iniの設定-session.use_trans_sid』が用意されているのですが、クッキー環境であればそちらを優先したいので、携帯サイト向けのファイルのソース上で何とかしようとしている所です。 そんな訳で、サーバーの『php.iniの設定-session.use_trans_sid』はOFFにした状態で **************a.php********************************** <?php ini_set("session.use_cookies","0"); ini_set("session.use_trans_sid","1"); session_start(); $_SESSION["test"] = "テストです"; echo "<a href=\"b.php\">セッションテスト</a>"; ?> ***************************************************** **************b.php********************************** <?php ini_set("session.use_cookies","0"); ini_set("session.use_trans_sid","1"); session_start(); echo $_SESSION["test"]; ?> ***************************************************** と、したのですがうまくいきません。 ini_set関数の使い方が間違っているのでしょうか? また、手動でIDを埋め込むやり方でも構いませんので、 ご存知の方いらっしゃいましたら宜しくお願いします!

    • ベストアンサー
    • PHP
  • PHPについて

    WEB上でPHPによるアクセス制限をしたいのですが、.htaccessを設定しているとサーバーエラーとなります。.htaccessをはずすと初期設定画面へは飛べ、初期設定できるのですが。 .htaccessの内容が悪いのか、どうか教えてください。 以下内容です。 AddDefaultCharset Shift_JIS AddType application/x-httpd-php .php .html php_flag session.use_cookies Off php_flag session.use_trans_sid On php_value session.name sd ともう一カ所のです。 order allow,deny deny from all allow from localhost

    • 締切済み
    • PHP
  • PHPSESSIDについて

    ログインするサイト運用での話なのですが、 現在php.iniの設定は session.cookie_lifetime 10800 session.use_cookies On session.use_only_cookies On session.use_trans_sid 0 としております。 クライアントに保存されるクッキーには 思いっきり PHPSESSID a80385e3060e05f2eefaf6314f80902a のような形で書き込まれるのですがこれは ログインするサイトでは普通のことなのでしょうか? 良い悪いの判断がつかないのでどなたかお教えください m(_ _)m

    • ベストアンサー
    • PHP
  • セッションが引き継げません

    PHP5.3 + Apache2.2 Windowsです。 IE7でページ遷移を行うと、セッションが引き継げず、新しいセッションが作成されてしまいます。(Chromeでは引き継げます) セッション保存フォルダに新しいセッションファイルが生成されていました。 以下ソースコードです。 $_SESSION['hogehoge'] = 'xxxx'; header("Location:sapmle.php"); sapmle.phpで$_SESSION['hogehoge']を参照すると、エラーになる。 エラー内容:Notice Undefined Index 'hogehoge' また、<a href="sample.php">次のページ</a> と記述したリンクをクリックしても同じエラーになります。 php.ini の use_trans_sid を Onにすると、エラーは出ません。 use_only_cookies を OnしてもOffにしてもエラーは出ました。 use_trans_sid が Offでも header("Location:sapmle.php?" . session_name() . "=" . session_id()); と書くとエラーは出ません。 エラーが出なくなれば良いので、use_trans_sid を Onにしたり、URLにセッションIDを付与すれば良いのかもしれませんが、 これらの処置はセキュリティ上良くないと聞いたことがあるので、どうするのがいいのかわかりません。 わかる人教えてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションidの使い方について

    参考書を読んだり調べたのですが、セッションidの使い方がよくわからないので質問させて下さい。 PHP4.3.10、 session.use_only_cookies off session.use_trans_sid offになっています。 携帯でログイン(login.php)後 メニュー(menu.php)でDBに登録されているIDとパスワードが一致したら SIDを発行してユーザの識別をしたいと考えています。 そこでわからないことがあります。 メニューにはA.php、B.php・・とあるのですが リンクするたびに <a href="A.php?<?php echo SID;?>">A.php</a> <a href="B.php?<?php echo SID;?>">B.php</a> のようにするのか、または$SID=session_id();のようにするのでしょうか。 そしてA.phpやB.phpでの識別はSIDをファイルなどに保存してその都度 これを呼び出し比較していくのでしょうか。 また、$_SESSION['a']="123";と session_register("a"); $a="123"; というのは同等の意味でしょうか。 質問ばかりですがどうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • 携帯サイト用PHPのセッションについて

    はじめまして。 携帯サイトでPHPのセッションを使ってリンク先の【Location:】内にURL情報を埋め込みたいのですが、「携帯ではクッキーがつかえない」「【session.use_cookies】と【session.use_trans_sid】の設定で使えるようになる。」と見たので試しているのですがうまくいきません。助けてください。 今試してみている記述内容は下記となっています。 ・記述内容: >>test_a/1.php <?php ini_set("session.use_cookies","0"); ini_set("session.use_trans_sid","1"); session_start(); $_SESSION['test'] = "http://xxx.xx/test_a/"; header("Location:http://xxx.xx/test_b/2.php? .session_name().'='.session_id()."); exit; ?> >>test_b/2.php <?php ini_set("session.use_cookies","0"); ini_set("session.use_trans_sid","1"); session_start(); echo "セッションは" .$_SESSION['test']; ?> 試しに"echo"で表示させてみたところ、PCでは「セッションはhttp://xxx.xx/test_a/」と表示されるのですが、携帯(FOMA F904i)では「セッションは」しか表示されません。 どなたか、よろしくお願いします。

    • 締切済み
    • PHP
  • PHPのセッションIDについて

    PHP5.3.14を使っています。 セッションについて勉強中です。 セッションを使ってページの表示回数をカウントアップするソースと、 そのセッションを破棄するソースの2種類を用意しました。 ※それぞれ、session_id()をecho表示しています。 クッキーを使った状態でこれらを動かすと、 リセットする(リンクを押してリロードする)度にセッションIDが変わるのですが、 クッキーを使わずに定義済み定数SIDを使って動かすと、 カウント値は元に戻るのですが、 リセットしてもセッションIDが変わりません。 どうすれば、新しいセッションIDを発行(SIDの値を更新)できるのでしょうか? よろしくお願いします。 【以下、ソース2種類と、iniファイルの一部です】 ●up.php <?php session_start(); if (empty($_SESSION['count'])) { $_SESSION['count'] = 1; } else { $_SESSION['count']++; } echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); ?> <p> <?php echo $_SESSION['count']; ?> 回目。 </p> <p><a href="up.php">カウントアップ</A> </p> <p> <a href="reset.php">リセット</A> </p> ●reset.php <?php session_start(); echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); echo ("##### ". $_SESSION['count']."回表示しました。</br>"); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } if(isset($_REQUEST[session_name()])){ $_REQUEST[session_name()]="" ; } session_destroy(); ?> <p> <a href="up.php">初めからカウントする</A> </p> ●php.ini (クッキーを使わずSIDを使うを設定) session.use_trans_sid = 1 session.use_only_cookies=0 session.use_cookies=0

    • 締切済み
    • PHP
  • ドコモのセッション機能について

    iモードHTMLシュミレータIIを使用して携帯版のサイトを作成しています。 セッションがうまく動いていないような感じがします。 画面遷移した後に”$_SESSION”の中身がないようです。 私の確認方法が悪いのでしょうか? 【環境】 ・iモードHTMLシュミレータII ・XAMPP Windows版Version 1.7.1 ・C:\xampp\php\php.iniの設定 ; This option enables administrators to make their users invulnerable to ; attacks which involve passing session ids in URLs; defaults to 0. session.use_only_cookies = 0 ; trans sid support is disabled by default. ; Use of trans sid may risk your users security. ; Use this option with caution. ; - User may send URL contains active session ID ; to other person via. email/irc/etc. ; - URL that contains active session ID may be stored ; in publically accessible computer. ; - User may access your site with the same session ID ; always using URL stored in browser's history or bookmarks. session.use_trans_sid = 1 【index.php】 <? session_start(); echo 'use_only_cookies = ' . ini_get('use_only_cookies') . "\n"; $_SESSION["xxx"] = "1234567890"; $login_url = "main.php"; header("Location: {$login_url}"); ?> ⇒”use_only_cookies =”のみ表示 【main.php】 <? session_start(); print_r($_SESSION); echo 'sssion.use_trans_sid = ' . ini_get('session.use_trans_sid') . "\n"; ?> ⇒”Array()”のみ表示 ⇒”sssion.use_trans_sid=1”表示 何か設定が悪いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 困ってます。phpセッションについて

    phpセッションについて教えてください。 既にwebサーバで動いているシステムがあります。 改修する必要があるため、パソコンの仮想サーバ(XAMPP)で動かした所、セッションに関わる部分がうまくいきません。 ●保存してる箇所 session_start(); session_regenerate_id( TRUE ); $_SESSION['xxx'] = $xxx; ●呼び出している箇所 session_start(); session_regenerate_id( TRUE ); if ( !isset( $_SESSION['xxx']) ) { //←ココでひっかかります //終了するための処理 exit; } $xxx = $_SESSION['xxx']; ************** 設定に関する部分です。 ●「.htaccess」の設定は以下のようにしています。 php_flag session.use_cookies On php_value session.cookie_lifetime 0 php_flag session.use_trans_sid Off php_value session.gc_maxlifetime 3600 php_value session.save_path 'C:temp' 'C:temp'に保存されたデータはありますので、書き出しはうまくいってるようです。 呼び出しがうまくいってません。 ソースの session_start(); session_regenerate_id( TRUE ); の直後に var_dump($_SESSION['xxx']); で値を参照するとNULLです。 ●「php.ini」のセッションの箇所は以下のようになっています。 session.save_handler = files よろしくお願いします。

    • ベストアンサー
    • PHP