0

申し訳ありませんが、これが長々とした投稿である場合は、このように尋ねる必要があります。さて、私はこのコードをいくつかのサーバーで試しましたが、正しく動作しません!

これまでのところ、PHP スクリプトを mysql から mysqli に変更しようとしてきましたが、成功よりも多くの失敗がありました。

登録フォームは正常に機能し、レコードが mysql データベースに追加され、ユーザーにもエラーなしで電子メールが送信されます。エラーが発生していないことを確認するために、すべてのページでこれを取得しました。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', '1');
?> 

ログインフォームも問題なく機能し、ユーザーをアカウントにログインさせます。

しかし、ここに問題があります。まあ、私が直面しているいくつかの問題です。

1-ページの上部にシンプルなトップリンクがあり、ユーザーがログインしていない場合はログインと登録が表示され、ログインするとユーザー名とログアウトのリンクが表示されます。あるサーバーでは機能し、別のサーバーでは機能しません。つまり、あるサーバーでは、ユーザーがログインしていても、ログインと登録のリンクにとどまります。

2- ユーザーをログアウトしてセッションを終了する logout.php ファイルがあります。しかし、これも独自の考えを持っています。古いPHPサーバーでは問題なく動作しますが、ユーザーアカウントのURLでページを再度更新すると、ユーザーは自動的にログインし直します。これを試したブラウザとキャッシュをクリアした回数は関係ありませんとクッキー。ページの更新時にユーザーをアカウントに再度ログインさせます。

また、logout.php ファイルは、php バージョン 5.3.21 のサーバーでは機能せず、ユーザーがアカウントからログアウトされません!!

これは member.php コードです:

<?php 
error_reporting(E_ALL);
ini_set('display_errors', '1');
?>
<?php
session_start(); // Must start session first thing
// See if they are a logged in member by checking Session data
$toplinks = "";
if (isset($_SESSION['id'])) {
    // Put stored session variables into local php variable
    $userid = $_SESSION['id'];
    $username = $_SESSION['username'];
    $toplinks = '<a href="member.php?id=' . $userid . '">' . $username . '</a> &bull; 
    <a href="member.php">Account</a> &bull; 
    <a href="logout.php">Log Out</a>';
} else {
    $toplinks = '<a href="join_form.php">Register</a> &bull; <a href="login.php">Login</a>';
}
?>
<?php
// Use the URL 'id' variable to set who we want to query info about
$id = preg_replace("[^0-9]", "", $_GET['id']); // filter everything but numbers for security
if ($id == "") {
    echo "Missing Data to Run";
    exit();
}
//Connect to the database through our include 
include_once "config/connect.php";
// Query member data from the database and ready it for display
$sql = "SELECT * FROM members WHERE id='$id' LIMIT 1";
$query = mysqli_query($db_conx, $sql);
$count = mysqli_num_rows($query);
if ($count > 1) {
    echo "There is no user with that id here.";
    exit(); 
}
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
$username = $row["username"];
$_SESSION['username'] = $username;
$userid = $row["id"];
$_SESSION['id'] = $userid;
// Convert the sign up date to be more readable by humans
$signupdate = strftime("%b %d, %Y", strtotime($row['signupdate']));
}
?>

これは logout.php ファイルです。

<?php
session_start(); 
session_destroy();
if( isset($_SESSION['id'])){ 
header("location: index.php");
} else {
exit('<h2>Could not log you out, sorry the system encountered an error.</h2>');
} 
?> 
<html>
<body>
<?php echo "$msg"; ?><br>
<p><a href="index.php">Click here</a> to return to our home page </p>
</body>
</html>

任意の助けをいただければ幸いです。

4

2 に答える 2

1

session_destroy()はセッション変数を破棄しません。「$_SESSION = array();」を使用できます あなたがそうしたいのなら。よろしくお願いします

于 2013-03-12T16:00:23.537 に答える