PHPのセッション名を短くする方法とセッションIDの表示についての質問

このQ&Aのポイント
  • PHPでセッション名を短くする方法について調べましたが、設定をしてもセッションIDの表示が変わりません。
  • リンクに自動でセッションを付与して表示する際も、セッションIDが変わりません。
  • php.iniを変更できないため、どなたか解決策をご存知の方がいらっしゃいましたら教えてください。
回答を見る
  • ベストアンサー

session.nameについて

PHPのセッションの設定についての質問です。 セッションの値がPHPSESSIDだと長いので、短くしようと思い、 ini_set("session.name", "sid"); と設定しました。 設定を確認すべく、<?=session_name()?> で表示すると、ちゃんと sid となっているのですが、 <?=SID?> でセッションと一緒に表示すると、なぜか PHPSESSID=XXXXXXXXXXXXXXXXXXXXXXX というふうに、名前が変わってくれません。 実際には、リンクの後ろに自動でセッションが付く 機能(session.use_trans_sid ですかね)を利用 したいので、自動でセッションをリンクにつけて 表示しているのですが、その際にもやはり、元のまま PHPSESSIDと表示されてしまう状況です。 ※ちなみに、php.ini はいじれないので、PHPファイル  の冒頭で、ini_setをしている状況です。 どなたか解決策をご存知の方がいましたら、教えて いただけますか? よろしくお願いします。

  • mela2
  • お礼率70% (133/189)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

session_name()で設定も出来ます 設定を行った後でsession_start()しないといけません。 <?php session_start(); session_name("sid"); //session_start()の後だと駄目 echo SID; ?> <?php session_name("sid"); //session_start()の前ならOK session_start(); echo SID; ?>

mela2
質問者

お礼

ありがとうございます! 設定後、スタート、なんですね。手元の書籍等では「session_start() の前に書く」なんて書いてなかったので、、、。 助かりました。

関連するQ&A

  • 携帯サイト用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
  • 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
  • セッションが引き継げません

    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
  • 携帯サイトでセッションでのフォームで変数の受け取り方法

    PHP5で携帯サイトでクッキーが使えないという条件でセッションを使ってのformのやりとりでプログラミングしています。 クッキーが使えないのでPHPの先頭で ini_set('session.use_trans_sid', '1'); としていて 入力フォームはセッションをして後は名前を入力するだけの ごく普通です(簡単に書きます)。 session_start(); <form action=onamae.php method=post> 実際にはここに以下の1行が入る <input type="hidden" name="PHPSESSID" value="XXXXXXXXXXXX" /> おなまえ<br><input type=text name=name size=15> <input type=submit value="投稿する"> 問題は受け取りですが $_POST['name']だとうまく受け取れますが $_SESSION['name']だと受け取れません。 入力するフォーム側で何らかの仕掛けが必要なのか分からないのです。 お手数ですが宜しくお願いします。

    • ベストアンサー
    • 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のセッション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
  • セッションを利用するための設定

    PHP初心者です。設定で意味がわからなくて質問させてもらいます。 バージョンはphp5を使用しています。 本を見ながら勉強しているのですが、セッションを利用するための設定としてphp.iniの session.use_trans_sid=on session.save_path=任意のディレクトリ に変更するとあるのですが、この任意のディレクトリは自分で新たに作成するのでしょうか?また、どこに作成するべきなのでしょうか? それと、php.iniの中を検索するとsession.save_path=という行がいくつか出てきますが、どの行を直せばいいのでしょうか? 初歩すぎて、ネットで検索してもヒットしなくて、ご存知の方よろしくお願いします。

    • 締切済み
    • PHP
  • セッション機能が使えない

    セッション機能を使って開発していたのですが、どうも思うように動作しないので、書籍に載っていた簡単なプログラムを試してみましたが動作しませんでした。 <書籍のソース> <?php session_name("MYSESS"); session_start(); if(!session_is_registered("access")) { session_register("access"); $access=1; } else { $access++; } ?> <html> <body> <p><?=$access?>回目の訪問です</p> <p><a href="sample.php?<?=SID?>">ここをクリック</a></p> </body> </html> 実行すると、「1回目の訪問です」と出て、クリックしても1回目のままで、増えることがありません。 <php.iniのsessionに関する部分の設定> [Session] session.name=PHPSESSID session.auto_start=1 session.serialize_handler=php session.gc_probability=1 session.gc_divisor=100 session.gc_maxlifetime=1440 session.bug_compat_42=0 session.bug_compat_warn=0 session.cache_limiter=nocache session.cache_expire=180 session.use_trans_sid=0 セッションデータは、ファイルとしては保存されていますが、中を見ると access|N; となっています。 他にもスクリプトを試しましたがすべてこのファイルのデータはNのままで値が保存されることがありません。 お気づきの点がありましたらご指摘をお願いいたします。

    • ベストアンサー
    • 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
  • セッション内容が化ける?

    PHP初心者です。 次の環境で一種のグループウェアを開発しました。 OS: RedHat Linux9.0 Web Server: Apache2.0.10 DB: PostgresSQL 7.4.2 PHP4.2.2 「ある社員が、ログインしたまま会議に出席し数時間後に戻ってみると、 画面内容が別の社員のものになっている」 という不可解な報告がありました。 調べてみるとログイン時のポータル画面は変化していないのですが、そこから 画面を切り替えて明細表示すると、社員名称が別の社員になっているのです。 しかも明細内容は何も表示されていません。 セッションで取得した内容が化けているのではないかと思っているのですが、 知識不足で行き詰まっています。 php.ini の設定は次のようになっています。(defaultだと思われます) session.save_handler = files 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_divisor = 100 session.gc_maxlifetime = 1440 session.bug_compat_42 = 1 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 原因と対処法が分かる方、どうか教えてください。

    • 締切済み
    • PHP

専門家に質問してみよう