2011-08-06 21 views
2

私は単純なログインフォームを作成しようとしています。私はsession_start()を持っています。ページにロードされた最初のものとして。ログインボタンがクリックされたときにajax呼び出しによって処理されるログイン関連コードを含むlogin.phpファイルがあります。それは含まれています:PHPセッション変数の登録

if ($_GET['cemail']) { 

$email = $_GET['cemail']; 
$password = md5($_GET['cpassword']); 
$sql = "select * from users where email='" . $email . "' and password='" . $password . "'"; 
$result = mysql_query($sql); 
if (mysql_num_rows($result) >= 1) { 
    session_register("email"); 
} 
else { 
    echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>"; 
} 

} 

を私がログインボタンをクリックすると、私はこの警告を得る: 警告:session_register()[function.session登録]:セッションのキャッシュリミッタを送信できません - すでに送られたヘッダ(出力が/で開始しました/home/clicker/public_html/hstrial-RBochner/login.php 82行目

82行目は、session_register( "email")という行です。 );

は私もちょうどsession_destroy()を呼び出し、ログアウトボタンを作成しようとしましたが、それは私に与え、この:

警告:/家庭で初期化されていないセッションを破棄しようとすると:session_destroy()[function.sessionは、破壊] /clicker/public_html/hstrial-RBochner/login.php on line 66

私はここで間違っていますか? session_start()をさまざまな場所に配置しようとしました。どんな助けやアイデア?ありがとう。

+0

[ヘッダー情報を変更できません - ヘッダーは既に送信されています、なぜ起こったのですか?](http://stackoverflow.com/questions/1827314/cannot-modify-header-information-headers-already-sent-why-its) -happening) – meagar

+0

'session_register'は廃止され、言語から削除される予定です。あなたはそれをまったく使ってはいけません。あなたがチュートリアルでそれを見つけたら、おそらく10年前です。 –

+0

これは、最も一般的なPHPの問題の1つです。答えはどこにでも明示的に書かれています*。新しい質問をする前に、あなたのエラーメッセージをグーグルで検索し、既存の質問/回答をSOで検索してください。 ['session_start'](http://php.net/manual/en/function.session-start.php)のマニュアルには、何十件もの回答が含まれています。 – meagar

答えて

1

あなたのログアウトボタンの質問についてあなたは、印刷やエコーを実行する前に

session_register() 

使用だけ

$_SESSION['email'] = ''; 
-1

移動session_registerの

<?php 
//logout.php 
session_start(); 
session_destroy(); 
echo "Logouted" 

代わりに、最初のセッションを開始する必要があります。

0

私はsession_register() PHPのドキュメント(link)で読み返すことができるものから、session_register()は非推奨と$_SESSION["email"] = "[email protected]";はPHP 4.1.0のようにそれを行うための新しい方法であるとされているようです。

コード例は次のようになります(これがうまくいくかどうかわかりませんが、正しい方向に導くはずです)。

<?php 
    session_start(); 
    session_destroy(); 
?> 

または

<?php 
    session_start(); 
    if(isset($_SESSION['email'])) 
     unset($_SESSION['email']); 
?> 
5

をあなたが必要とする:あなたのコード の開始で

  1. プットのsession_start()を使用すると、その後、どうなるのログアウトについては

    <?php 
        if ($_GET['cemail']) { 
         $email = $_GET['cemail']; 
         $password = md5($_GET['cpassword']); 
         $sql = "select * from users where email='" . $email . "' and password='" . $password . "'"; 
         $result = mysql_query($sql); 
         if (mysql_num_rows($result) >= 1) { 
          $_SESSION['email'] = $email; 
         } 
         else { 
          echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>"; 
         } 
        } 
    ?> 
    

  2. session_register()を使わず、廃止された関数で、$ _SESSION ['foo'] = 'baa'で置き換えます。
  3. destructセッション:

    session_start();
    session_destroy();

  4. あなたのWebアプリケーションはSQL injection攻撃に脆弱です。 -check best way to stop SQL Injection in PHP

+0

私はあなたの3番目の点に同意しません - unset($ _ SESSION);間違っている - http://www.php.net/manual/en/function.unset.php#77926 – genesis

+0

私は同意しないので。しかし、大丈夫、downvoteはあなたが正しいと – genesis

+0

を削除しました。更新されたレスポンス.. –

0

私はそれがページの先頭にすべてのPHPコードを置くことによって動作するようになりました。