• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セッションに関して)

セッションに関しての質問

taketan_mydns_jpの回答

回答No.2

かなり苦労されているようですね。 誰でも通る道です。頑張って下さい。 通れなければ、、、PHPマスターは出来ないと思います。 他人のソースの流用まででしょうね。 認証の仕方にはいろいろな方法が考えられますが、私自身は独自の方法でやってます。そこいら中のソースを参考にしてはいますが。 私の場合、認証をスクリプトにまとめて、インクルードしています。例えば下のような感じです。DB接続はPEARライブラリを使っています。 dbconn.inc.php //DB接続、$connで接続IDを返す auth.inc.php <?php require_once("dbconn.inc.php"); session_start();//セッション開く //セッションに値が無い場合はパスワード認証画面を表示 function authform(){ echo <<<EOC <form action="" method="post"> ユーザ名 <input type="text" name="username" /><br /> パスワード <input type="password" name="passwd" /><br /> <input type="submit" name="send" value="送る" /> </form> EOC exit;//それ以降表示を止める } if($_SESSION[auth][username] == ""){ echo "認証が必要です。ユーザー名とパスワードを入力して下さい。"; authform(); } //ユーザ名とパスワードが送られてきた場合は認証 if($_POST[username] != "" && $_POST[passwd] != ""){ //addslashesはSQLインジェクション防止のため $username = addslashes(trim($_POST[username])); $passwd = addslashes(trim($_POST[passwd])); $sql = "SELECT * FROM usertb WHERE username='{$username}' AND passwd = '{$passwd}'"; $data = $conn->getRow($sql,2);//PEAR で接続、使わない場合は mysql_query等ですかね if($data[username] != ""){ //データベースにあった場合はセッションに登録 $_SESSION[auth][username] = $data[username]; //ついでに諸々の情報をセッションに登録 $_SESSION[auth][nick] = $data[nick];//例えばニックネーム $_SESSION[auth][birth] = $data[birth];//誕生日 }else{ //認証失敗、もう一度フォームを表示 echo "ユーザー名又はパスワードが違います"; authform(); exit; } } // Copyright taketan_mydns_jp ?> アクセス制限をするページにはauth.inc.phpを頭にインクルードすれば、セッション登録が無かった場合はログインフォーム表示、あった場合は無視、という事になります。 a.php <?php //認証 require_once("auth.inc.php"); //以下スクリプト ?> 検証してませんが、こんな流れでやってます。 少なくとも、PHPLibよりは簡単で分かりやすいかと思いますが。

sadacha
質問者

お礼

taketan_mydns_jp様 こんにちは。お世話になっております。 コードまでお教えいただき有難う御座います! 先日、PEARをインストールし、使えるよう設定はしましたが、現在のところ、PEARの手順?が分からず、お教えくださったスクリプトでいうと、「dbconn.inc.php」とは、どういうコードになる?といった状況です。 折角お教えくださったにも、すぐに解決できるほどのスキルを持ち合わせていませんが、ご教授いただいた内容の流れでいこうと思います。 お忙しい中ご指導いただき有難う御座いました。追ってご報告いたしますので、引き続きご指導いただけたら幸いです。有難う御座いました。

sadacha
質問者

補足

taketan_mydns_jp様 こんばんは。補足欄から失礼いたします。 只今、taketan_mydns_jp様よりご指導いただいたコードを基に試行錯誤を繰り返しております。 >dbconn.inc.php //DB接続、$connで接続IDを返す そこで、おんぶに抱っこのようで恐縮なのですが、接続IDを返すとは、セッションIDのことを仰っているのですか?セッション管理用テーブルを作成し、ログインID、パスワード、セッションIDを登録出来るテーブルを参照・・・。といった考えで宜しいのでしょうか? セッションに関して、いまいち理解に乏しいところが御座いますが、taketan_mydns_jp様のアドバイスにより、方向性が見えてきたので、今一度、ご指導頂ければ有難いです。お忙しい中恐縮ですが、宜しくお願い致します。

関連するQ&A

  • フィールドに関して

    こんにちは。お世話になっております。 現在、右も左も分からないまま、書籍を参考に、DB(MySQL)を触り始めて2ヶ月足らずの初心者ですが、とあるサイトに、PostgreSQLの設定として以下のようなものが紹介されておりました。 sid、uidなどは分かるのですが、最後のフィールド(rdate)はどのような意味を持つものなのでしょうか? 初めて見る内容のものなので、DBの違いによるものなのか?などなど、DBの設定の意味が分からず躓いております。 お忙しい中恐縮ですが、ご教授頂ければ幸いです。 CREATE TABLE session ( sid varchar(32) primary key, uid varchar(16) not null, password varchar(16), rawdata varchar(512), rdate timestamp default 'now' );

  • セッション情報をDBに持つには

    下記のサイトを見つけ、参考にしようと思いましたが... http://www.res-system.com/weblog/item/619 行った事は下記の通りです。 1.セッション情報を格納するテーブルを作成。 2.php.iniの変更。 聞きたい事は下記の通りです。 1.session_set_save_handler関数はどこに記述すればいいのでしょうか。 2.ユーザー定義のセッション保存関数(f_open、f_close、f_read、f_write、f_destroy、f_clean)はどのように記述すればいいのでしょうか。 このような書き方をして申し訳ありませんが私を助けて下さい。 すみませんがご教授いただけませんでしょうか。 データベースはPostgreSQL 8.4.9です。 宜しくお願いします。

    • 締切済み
    • PHP
  • セッション

    phplibを使わないでユーザ認証を用いたwebサイトを作ろうと思います。 shinki.php => login.php => contents1.php=> contents2.php .... のような流れの構造で、直接contents1.phpなどに入られないようにセッションを使用したいと思います。 ユーザが持っているセッション名と、サーバー側のセッション名が一致するという条件だけでログインしたユーザと考えていいのでしょうか? 現在はこのような感じになっています。 まずshinki.phpでユーザー登録します。この時ユーザ情報と暗号化されたパスワードをDBに保存。 login.phpでユーザIDとパスワードを入力し、DBのデータと一致するとcontents1.phpに進む。この時セッションを発行し、idと暗号化されたパスワードをセッションに記憶させる。 contents(1 | 2).phpのコード <? session_start(); // PostgreSQL 接続 if (!($cn = pg_connect("dbname=****"))){die;} // SQL文 $sql = "select * from ***** where id='$_SESSION[id]'"; if (!($rs = pg_exec($sql))) {die;} $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $array = pg_fetch_array($rs, $i); } // セッションのパスワードとデータベースのパスワードが一致 if($_SESSION[pass] == $array['pass']){ login_html(); }else{ print "ログインしてください。"; } // PostgreSQL 切断 pg_close($cn); function login_html(){ print "<html><head><title><title></head><body>"; .... .... } ?> このような構造には、セキュリティー的な問題はあるのでしょうか? おそらくいろいろ問題があると思いますので、ご指導お願いします。 一般的なパスワード制のページではどのような処理をしているのでしょうか? よろしくお願いします。 os:linux httpd:apache1.3.27 postgreSQL php4.x.x

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

    php初心者&ど素人です 勉強のためにphpとmysqlで簡単なログイン機能を作ってみようと思いました しかし、Locationでページ移動したときのセッションがセキュリティ的に安全なのかわかりません ログインフォームのlogin.phpから自分自身に送信、ログインできたらセッションを付けてから header("Location:hoge.php");でhoge.phpに飛ばしています ログインした後のhoge.phpページではログイン確認をセッションidがあるかだけ確認しています セッションidがなかったらログインページ戻す if(!$_SESSION['id']){ header('Location: login.php'); exit(); } 質問1 セッションidは表示されている誰でも見れるidなのでセキュリティ的にまずいですか? 簡単にセッションのっとれるもんなんでしょうか? 質問2 一般的にはどうやているのでしょうか? ログインページ全て(例えば編集画面とか会員情報とか)にmysqlから暗号化されたパスワードを取得して、それをセクションに入れて、また、mysqlからパスワードと照合したりしてるんでしょうか? よろしくお願いします

    • ベストアンサー
    • PHP
  • SESSION の受け渡し

    初心者ですので、見当違いの質問の場合はご容赦ください login.php(ユーザ認証) cart.php(ショッピングカート) という構成でSESSION変数の受け渡しを行いたいのですが login.php で認証確認後、 session_start(); $_SESSION['su_id'] = $u_id ; $_SESSION['su_name'] = $u_name ; のように設定の上 require "./cart.php"; でcart.phpを呼び出し(?)ています require直後のcart.phpの初期状態では $_SESSION['su_id'] 、$_SESSION['su_name']ともに正しく表示しますが submit等(次ページ表示などで)で再表示を行うと $_SESSION['su_id'] 、$_SESSION['su_name']が引き継がれません cart.phpにおける session_start()時に、新しいIDに置き換わっているからだと思いますが このようなケースではどういう処置を行えばよいのでしょうか? 幼稚な質問かどうかすら判断できていないのですが コメントを頂ければ助かります よろしくお願いします

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

    ページの構成が代わり、A-B-Cと順番だったのをA-Cと変更しました。 AからCリンクにとぶように設定したのですが、リンクを変更していてもBのページに行ってしまいます。 このプログラムを作った人に聞きましたところ、 if{session("user_sbt") というセッション変数で、新しく作られた画面のところで何もセットしていなければ初めの画面(B)に戻るというプログラムが走っているそうです。作った人に直してもらえたら良いのですが、事情で日本にはいないので、わかる方教えてください。よろしくお願いします。 PHPファイルの上部には session_start(); require_once("../_common/head.php"); require_once("../_common/mysql.php"); というセッション変数が記入されています。

    • 締切済み
    • PHP
  • セッションが変数が取得できません

    こんにちは。初心者で大変申し訳ないのですが、2日間悩みましたがどうしても解決できないため質問させて頂きました。どうかご教授下さい。 PHPのセッション機能の利用をしようと以下のような環境でテストスクリプトを実行したのですが、うまくいきません。 PHPバージョン4.3.10 register_globals On session.auto_start Off session.bug_compat_42 On session.bug_compat_warn On session.cache_expire 180 session.cache_limiter nocache session.cookie_domain no value session.cookie_lifetime 0 session.cookie_path / session.cookie_secure Off session.entropy_file no value no session.entropy_length 0 session.gc_divisor 100 session.gc_maxlifetime 1440 session.gc_probability 1 session.name PHPSESSID session.referer_check no value session.save_handler files session.save_path /tmp session.serialize_handler php session.use_cookies Off session.use_only_cookies Off session.use_trans_sid On SESSION登録側スクリプト <?php session_start(); $_SESSION['tarou'] = 50; ?> <a href="test.php">test</a> 結果表示側スクリプト <?php session_start(); echo($_SESSION['tarou']); ?> session.use_trans_sid Onで透過的にURIにセッションIDを埋め込むタイプで、 セッションファイル自体は作られているのですが セッション変数は登録されておらず、空のセッションファイルとなってしまっています。 色々と調べてみたのですがどうしても解決できません。 大変お手数ですがどうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPサイトでのセッション情報取得について

    PHPのサイトにて、ユーザーIDをJavaScriptの変数に渡す処理について質問です。 システム会社からユーザーIDが格納されている変数ということで下記の記述を教えていただきました。 「Session::getRegistry('uid')」 そこで、下記のようにjsを設定したのですが、値を取得できません。 <script type="text/javascript"><!-- uid='<? Session::getRegistry('uid'); ?>'; // --></script> 【質問】 1.「Session::getRegistry('uid')」という記述でデータを取得可能なのでしょうか? 2.もし、セッションの「uid」に値が格納されているとした場合、どのように記述したら上記のJavaScriptに値を渡せるでしょうか?

    • 締切済み
    • PHP
  • php session_start()

    いつもお世話になっております PHP session_start()について質問させていただきます。 ブラウザで確認すると以下のワーニングが表示されます。 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ファイル名) in ファイル名 過去の質問を参考にしてphpinfo()を使用してサーバの設定を確認したところ、Session Supportはenabledとなっております。 また、余分なスペースなどが無いよう、コードを1行にまとめて試してみましたが同じ結果でした。 コードは以下のとおりです。ちなみにサーバはレンタルサーバを使用しております。 ■index.php <?php  $documentroot = dirname( __FILE__) . '/';  require_once $documentroot . '../php_libs/config/config.inc.php';  require_once("Auth/Auth.php");  require_once("HTML/QuickForm.php");  require_once("HTML/QuickForm/Renderer/ArraySmarty.php");  require_once( _SMARTY_LIBS_DIR . "Smarty.class.php");  require_once( _MODULE_DIR . "build_screen.inc.php");  require_once( _MODULE_DIR . "menu.inc.php");  require_once( _MODULE_DIR . "MYDB.inc.php");  require_once( _MODULE_DIR . "sub.inc.php");  main(_MEMBER_FLG);  exit; ?> ■main関数 <?php  function main($systemflg){   // セッション名の設定   $sess_name = ($systemflg) ? _SYSTEM_SESSNAME : _MEMBER_SESSNAME;   session_name($sess_name);   // セッション開始   session_start(); ~以下省略~ どこに問題があるかお分かりの方いらっしゃいましたら、ご回答のほどよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのセッションについて質問です

    phpで会員制サイトの制作を勉強中です。 pdoでmysqlデータベースに接続しています。 セッションの「session_set_cookie_params」について質問ですが、 session_set_cookie_paramsで有効期限を設定する場合、 ログイン時にsession_set_cookie_paramsでセッションの有効期限を設定し、 他のページではsession_start()さえ記述すれば、 有効期限を過ぎると勝手にセッション変数のデータを空にしてくれるのでしょうか? それとも全てのページにsession_set_cookie_paramsを書かなければならないのでしょうか? プログラムを書いている上でセッションの動作がおかしい(有効期限が過ぎてもログアウトしない)のでsession_set_cookie_paramsの記述がおかしいのかと思い、質問しました。 また、セッション変数の有効期限を変数毎に個別に設定して削除する方法はないのでしょうか? ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP