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

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

taketan_mydns_jpの回答

  • ベストアンサー
回答No.4

苦労されているようですね。 苦労が今後の糧になります。 一つ訂正があります。#3のdbconn.inc.phpの例では接続IDは$dbで返していますが、#2のauth.inc.phpでは$connとなっています。コピペはいかんですね(笑。 > そのサイトでは、sesshion_tbと、myuser_tbの2つを用意してありますが というのは分かりませんが、セッションはセッション関数でやるという方針でしょうから、ユーザーテーブルはmyuser_tbという事になります。 私の場合はテーブルはその都度自作しています。 例えば、内部メンバーID、ユーザー名、パスワード、ニックネーム、有効・無効のフラグを作ったとすると、 CREATE TABLE `usr_tb` ( membid int NOT NULL auto_increment, username varchar(63) default NULL, passwd varchar(63) default NULL, nick varchar(127) default NULL, flg tinyint default 0, PRIMARY KEY (membid) ) というようなテーブルになります。出来れば自作したほうが良いですよ。どうせこれからテーブルを作っていくわけですし。 ところで、DBの管理はどうしてますか? MySQLとPHPではphpMyAdminが一番おすすめです。というより、ほとんどの人が使っているんじゃないかな? > マニュアルの1番目のコードと2番目のコードは、記述方が違うだけのものなのでしょうか?それとも意味あってのものなのでしょうか? はっきりとした事は分かりませんが(PEARソースを解読すれば分かるでしょうが)、とりあえずある程度環境依存的になっているような気がします。前にPostgreSQLのバージョンを上げたら配列形式でないと接続出来ない、という事があったので。 マニュアルには何やら詳しく書かれていますね。 http://www.go-pear.org/manual/ja/package.database.db.intro-dsn.php > 最後に$db->disconnect();があり、No2にはありませんが、この2つの違いは何処から来ているのでしょうか? disconnect()ですから、接続解除です。No1は題名に接続と解除、とあります。 PHPではプログラムが終了すると接続解除されますので、私は使った事はありません。 > $dsn = 'mysql://root:******@localhost/test'; 何はともあれ接続出来るというのは良い事です。 ですが、rootと言うユーザ名で接続するのは出来るだけ止めたほうが良いです。他人に推測出来やすいので。 root以外の管理ユーザを作成し、rootユーザは削除したほうが無難です。 この辺の管理はphpMyAdminの特権管理で出来ます。 では。

参考URL:
http://www.phpmyadmin.net/
sadacha
質問者

お礼

taketan_mydns_jp様 おはよう御座います。 掘り下げてのご説明で、また一段と理解に近づいた気がします。 今、仕事の関係でスクリプトを触る事は出来ませんが、追って改めてご報告も兼ねたお礼をさせて頂きます。有難う御座いました。 追伸:ユーザ名の件やphpMyAdminの件など、一連に関することまでご指導いただき、どんな些細な事でも初心者の私にとって、有難く感謝の気持ちでいっぱいです。

sadacha
質問者

補足

taketan_mydns_jp様 こんばんは。お世話になっております。補足欄から失礼いたします。 日中、理解を深めるために、お教えいただいたauth.inc.php、dbconn.inc.phpのスクリプト内容を印刷して持ち歩いていたのですが、「なるほど、こうすれば良いのか。あぁすれば良いのか」などと思ったものの、実際に必要な箇所を変更し、実行させたところ、DBに接続してはいるものの、DBに登録されたIDを検索する事が出来ず?に、認証出来ずにおります。(認証失敗ではなく、セッションに登録の状態が続いてます。) 思考錯誤ながら、色々と変更したりでコメント部が多くなっていますが、現在は以下の様になってます。 <?php require_once("dbconn.inc.php"); session_start();//セッション開く //セッションに値が無い場合はパスワード認証画面を表示 function authform(){ //action="$PHP_SELF"を変更してみた echo <<<EOC <form action="$PHP_SELF" 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] != ""){ //if($_POST[username] <> "" && $_POST[passwd] <> ""){ //addslashesはSQLインジェクション防止のため $username = addslashes(trim($_POST[username])); $passwd = addslashes(trim($_POST[passwd])); //$sql = "SELECT * FROM usr_tb WHERE like username='$username' AND like password = '$passwd'"; $sql = "SELECT * FROM usr_tb WHERE username = '{$username}' AND password = '{$passwd}'"; //$sql = "SELECT * FROM usr_tb WHERE username='{$username}' AND passwd = '{$passwd}'";//左記コードのように変数以外に該当するイコールを、==としてみたが、これも駄目。 $data = $conn->getRow($sql,2);//PEAR で接続、使わない場合は mysql_query等ですかね //$data = mysql_query($sql); if($data[uid] != ""){ //if($data[username] <> ""){ //データベースにあった場合はセッションに登録 $_SESSION[auth][username] = $data[username]; //ついでに諸々の情報をセッションに登録 $_SESSION[auth][nick] = $data[nick];//例えばニックネーム echo "$data[nick]";//試にと設置してみたが反映されず。テーブルを参照出来ていないのでしょうか? }else{ //認証失敗、もう一度フォームを表示 echo "ユーザー名又はパスワードが違います"; authform(); exit; } } // Copyright taketan_mydns_jp ?> 尚、DB名はtestとし、テーブルはテスト的に、taketan_mydns_jp様からアドバイス頂いた物を設置してみました。 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