0

セッションをphpファイルに表示する際に問題があります。セッションを表示することはできますが、正しく表示されません。「S」という文字が表示されるだけです。

ユーザーがシステムにログインすると、セッションが作成され、一意の ID とフルネームが含まれます。

私のログインphpは以下の通りです。私が問題を抱えているのは、'full_name' と 'id' のセッションだけです。それらを自分でスクリプトにコーディングしなければならなかったからです。プローブがどこかでエラーを起こしました

<?php

ob_start();
include ("includes/dbConfig.php");
$tbl_name="users"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$un", "$pwd")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$username=$_POST['username']; 
$password=$_POST['password'];


// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$encrypted_password=md5($password);
$username = mysql_real_escape_string($username);
$encrypted_password = mysql_real_escape_string($encrypted_password);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and    password='$encrypted_password'";
$result=mysql_query($sql);

//Get User Info

$userinfo="SELECT * FROM $tbl_name WHERE username='$username'";
$result=mysql_query($userinfo);

$full_name= $userinfo['full_name'];
$id= $userinfo['id'];

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $username and $password, table row must be 1 row
if($count==1){

// Register $username, $password and redirect to file "console.php"
session_start();
$_SESSION['username'] = $username;
$_SESSION['full_name'] = $full_name;
$_SESSION['id'] = $id; // store session data
header("Location: console.php");      
}
else {
echo "Wrong Username or Password";
} 
ob_end_flush();

?>

サイト内でセッションをテストしたところ、いくつかのダミー情報が正常に渡されました。データベースから情報を取得する際の問題だと思います。

md5 が最も安全なパスワード暗号化方法ではないことはわかっていますが、必要なものには問題ありません。

ありがとうございます。


これは私のページの上部にあるコードです。

<?php

    include ("includes/dbConfig.php");

    session_start(); 
    if(!$_SESSION['username'])
    if(!$_SESSION['full_name'])
    if(!$_SESSION['id']) {
        // user not logged in redirect
        header("Location: index.php");  
    }
?>

これは、セッション データを出力するために使用するコードです。

<?php echo "" . $_SESSION["username"]; ?>
<?php echo "" . $_SESSION["full_name"]; ?>
<?php echo "" . $_SESSION["id"]; ?>
4

3 に答える 3

3

これはまもなく非推奨になりますが、エラーは発生しません。

$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$encrypted_password'";
$result=mysql_query($sql);

これは無意味です。上記のクエリで既にこのデータを取得しています

//Get User Info
$userinfo="SELECT * FROM $tbl_name WHERE username='$username'";
$result=mysql_query($userinfo);

これは間違っています。関連付けられた配列として文字列にアクセスしようとしています!

$full_name= $userinfo['full_name'];
$id= $userinfo['id'];

あなたが必要

$count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count==1){
    $row = mysql_fetch_assoc($result);
    $full_name= $row['full_name'];
    $id= $row['id'];
}

それが「S」を生成している理由です。わからない。しかし、これらはいずれにせよエラーです。

于 2013-01-05T01:21:15.910 に答える
0

元のスクリプトに不要なコードがたくさんあることを示したいだけです (これには、Philip Whitehouse の問題に対する解決策が組み込まれています)。

<?php

include "includes/dbConfig.php";
$tbl_name="users"; // Table name 
// Connect to server and select databse.
mysql_connect($host, $un, $pwd)or die("cannot connect"); // no quotes needed around vars
mysql_select_db($db_name)or die("cannot select DB"); // no quotes needed around vars

$username = mysql_real_escape_string($_POST['username']);
$encrypted_password = mysql_real_escape_string(md5($_POST['password']));
$sql="SELECT username, full_name, id FROM $tbl_name WHERE username='$username' and    password='$encrypted_password'";
$result=mysql_query($sql);

// If result matched $username and $password, table row must be *AT LEAST* 1 row
if(mysql_num_rows($result)){
    session_start();
    $_SESSION['user'] = mysql_fetch_assoc($result);
    header("Location: console.php");      
}
else {
    echo "Wrong Username or Password";
    die;
} 

?>

そしてチェックする

<?php

session_start();
// using if(!$_SESSION['..']) without isset throws a warning if it's not set
if(!isset($_SESSION['user'])) header("Location: index.php");

?>

そして反響する

<?php

echo $_SESSION['user']['username'];
echo $_SESSION['user']['full_name'];
echo $_SESSION['user']['id'];

?>
于 2013-01-05T01:35:27.137 に答える
0

session_start()最初に起こることはメソッド呼び出しであることを確認する必要があります。コードがメソッド呼び出しの前に 1 文字しかエコーしない場合、セッションは機能しません。

于 2013-01-05T01:24:17.763 に答える