2016-06-16 23 views
-1

まずはIEの問題だと思っていました。しかし、今、私はエラーコードを有効にして、そこがこの表示されます。Notice:セッションは既に開始されていました。セッションを終了できません。

お知らせ:セッションがすでに開始されていた - ライン上/var/www/html/login.phpでのsession_start()を無視して7

7行目セッション開始コマンドです。

私は3つのファイルを持っています。 index.phpを、すべてのログイン・プロセスが含まれていauth.phplogin.php

のindex.php

<?php 

echo "<a href=\"/login.php\">Log in</a>"; 

?> 

auth.php

$_user_ = 'admin'; 
$_password_ = 'password'; 

session_start(); 

$url_action = (empty($_REQUEST['action'])) ? 'logIn' : $_REQUEST['action']; 
$auth_realm = (isset($auth_realm)) ? $auth_realm : ''; 

if (isset($url_action)) { 
if (is_callable($url_action)) { 
    call_user_func($url_action); 
} else { 
    echo 'Function does not exist, request terminated'; 
}; 
}; 

function logIn() { 
global $auth_realm; 

if (!isset($_SESSION['username'])) { 
    if (!isset($_SESSION['login'])) { 
     $_SESSION['login'] = TRUE; 
     header('WWW-Authenticate: Basic realm="'.$auth_realm.'"'); 
     header('HTTP/1.0 401 Unauthorized'); 
     echo '<h1>Not authorized!</h1>'; 
     echo '<p>You must enter a valid login and password.</p>'; 
     echo '<a href="?action=logOut">Log in</a> | '; 
     echo '<a href="../">Back to the Website</a></p>'; 
     exit; 
    } else { 
     $user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : ''; 
     $password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : ''; 
     $result = authenticate($user, $password); 
     if ($result == 0) { 
      $_SESSION['username'] = $user; 
     } else { 
      session_unset($_SESSION['login']); 
      errMes($result); 
      exit; 
     }; 
    }; 
}; 
} 

function authenticate($user, $password) { 
global $_user_; 
global $_password_; 

if (($user == $_user_)&&($password == $_password_)) { return 0; } 
else { return 1; }; 
} 

function errMes($errno) { 
switch ($errno) { 
    case 0: 
     break; 
    case 1: 
     echo '<h1>Not authorized!</h1>'; 
     echo 'Username and password are incorrect.'; 
     echo '<p><a href="?action=logOut">Log in</a> | '; 
     echo '<a href="../">Back to the Website</a></p>'; 
     break; 
    default: 
     echo 'Unknown error'; 
}; 
} 

function logOut() { 

session_destroy(); 
session_unset(); 

if (isset($_SESSION['username'])) { 
    session_destroy($_SESSION['username']); 
    foreach(array_keys($_SESSION) as $k) unset($_SESSION[$k]); 
    echo "<h1>You've successfully logged out</h1>"; 
    echo '<a href="?action=logIn">Log In</a> | '; 
    echo '<a href="../">Back to the Website</a>'; 
} else { 
    header("Location: ?action=logIn", TRUE, 301); 
}; 
if (isset($_SESSION['login'])) { session_unset($_SESSION['login']); }; 
exit; 
} 

login.php

のindex.phpと
<?php 

$auth_realm = 'My Website'; 

require_once 'auth.php'; 

session_start(); 
if(!isset($_SESSION['username'])) { 
die('Please login first <a href="login.php?action=logIn">log in</a>.'); 
} 
echo "<p>You've logged in as {$_SESSION['username']} "; 
echo '<a href="?action=logOut">Log out</a></p>' 

?> 
  1. スタートし、今すぐにクリックして「管理者」と「パスワード」「戻るホームページに」
  2. のうち
  3. クリックしてログオンし
  4. をクリックし、ログインをクリックして入力します。 「ログイン」再び
  5. を押して、「戻るホームページに」ログインに
  6. クリックで
  7. クリックをキャンセルします。

==>ユーザー名とパスワードを渡さずにログインしました。これはセキュリティの欠如で、IE 11でしか動作しません。セッションを削除するためにいくつかの異なるオプションを使用しようとしましたが、何も役に立ちません。誰が私を助けられるか?

私もChromeでこれをテストし、ここではそれが正常に動作し、ポイントの後7

答えて

0

がこのようにログアウトしてください私は、ログインデータを渡すことを強制しています:

unset($_SESSION['username']); 
session_destroy(); 
setcookie('PHPSESSID','',time()-3600,'/','',0,0); //unless you changed the PHP session cookie name 
+0

いいえ、これはありません助けて。私はクッキーを設定しませんが、私はこのコードを試しました。その結果、ログアウト時に再びログインウィンドウが表示されます。そして、まだ崩壊は残っています。 – HamburgIsNice

+0

Internet Explorerの未解決のバグを検出しましたか、コードが間違っていますか? – HamburgIsNice

関連する問題