1

ユーザーがログインする簡単なスクリプトがあります。セッションを使用しようとしているため、ユーザーは Web サイトを閲覧するどのページでもログインしたままになります。

私はこれらのスクリプトを持っています:

ユーザーがログインしている、またはログインしている場合、「You are now logged in, $user」が表示されるはずですが、デフォルトでは「You are not logged in.」が表示されます。ページ全体に表示されます。

ページを変更したり、ログインしようとしても、エラー メッセージは表示されません。

コードの最新バージョンは、 http ://www.mediafire.com/?7n6qo3p4gpkaao4 にあります。

誰でも助けてもらえますか?

ありがとう。

4

11 に答える 11

5

直後session_start()にセッションが必要な各ファイルのページの上部にを配置する<?phpと、問題がないはずです。実際のHTMLがページにエコーされる前に、この関数を呼び出す必要があります。

ここでphpセッションのドキュメントを読んでください

コードをさらに調べて、ユーザーがログインしている場合にのみ他のページを表示するように制限する場合は、logincheck.php以下の内容で呼び出される新しいファイルを作成し、各ファイルの先頭に。で含めますrequire_once("logincheck.php");session_start()この場合、上記のようにコードを再度配置しないでください。

<?php
session_start();
if(isset($_SESSION["username"])){
    $welcomeMsg = "<p align='right'>Welcome, </p>" .$_SESSION["username"];
}else{
    if(basename($_SERVER["PHP_SELF"])=="index.php")
        $welcomeMsg = "You are not logged in";
    else
        header("Location:index.php");//will redirect the user to index page if he has not logged in
}
?>

$welcomeMsgこれで、エラーメッセージを表示したいページのどこでも使用してエコーできます。

それがあなたの質問に答えるのに役立つことを願っています。

于 2012-12-21T09:16:05.320 に答える
2

form action = "?op = login" method = "POST" action = "login.php"

フォームでアクションを2回使用するのはなぜですか?

action="login.php"は必須です。

于 2012-12-16T19:11:07.080 に答える
1

問題がどこにあるのか正確にはわかりませんでした。コードが多すぎて読み取ることができませんでしたが、2つのファイル(最初の2つ)を調べると、問題になる可能性のあるものに気づきました。Session_idはユーザーを識別することになっています。ブール値(true)を入力するだけで、HTTPヘッダーを変更するだけで、サイトのユーザー予約部分に簡単に侵入できます。2つ目は、何かをエコーする前にlogin.phpにリダイレクトを設定することです。何も表示されないと思います。リダイレクトは、エコーの前に発生します。3つ目は、取得して保存するパスワードを明確にハッシュする必要があるということです。人々がデータベースにアクセスし、何の作業もせずにすべての人々のすべてのパスワードを持っているのはとても悲しいことです。

そして最後のアドバイス:すべてのファイルの最初のステートメントとしてSession_Startを配置してみてください...それかもしれません。

于 2012-12-16T18:54:41.203 に答える
0

私はこの時点で停止しました:

redirect('../TASK2PHP/upload.php');

その機能は何ですか、それは何をしますか?

たぶん、http_redirectまたはheaderまたはHttpResponse ::redirect ..を使用するつもりでした。

于 2012-12-16T18:53:59.117 に答える
0

TL、DR。しかし、これは、この種の一般的な設計パターンを教える記事です。PHP クライアント認証を使用するすべての Web サイトは、この設計に従います。

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_2391-PHP-login-logout-and-easy-access-control.html

記事からコード スニペットをコピーして貼り付けることができます。コードの動作について質問がある場合は、ここにコメントを投稿してください。説明をお手伝いします。〜レイ

于 2012-12-22T17:32:41.600 に答える
0

ログインメソッドのコード構造は紛らわしいようです。リダイレクトする前にすべてをエコーすることを常にお勧めします。そうしないと、httpresponse が文句を言います。さらに、私のアドバイスは、最初にエラー報告を有効にすることです。エラー報告を有効にして開発を行うことは常に良い考えです。ファイルの先頭に配置するだけで、login.php 内でこれを行うことができます。 error_reporting(E_ALL); または E_ALL を 1 に設定します。 ini_set('display_errors','On');

于 2012-12-21T08:26:36.777 に答える
0

index.php、login.php を編集し、セッションの作業フローをセットアップしました。他のファイルでセッションを設定するためのコード構造に従ってください。次のログイン フォーム rar ファイルをダウンロードします。 https://www.box.com/s/1ie9ilp9jgluvokf6say

于 2012-12-20T11:41:14.557 に答える
0

index.php ファイルに作成し、ユーザーがログインしている場合はページを含め、含めたすべてのページを確認します。ユーザーが設定されていない場合は、ログイン ページにリダイレクトします。

例 :

index.php

if(isset($_SESSION['UserId'])){ 
      //make simple function to get the username from user ID
        $dUserName = getUserName($_SESSION['UserId']);
        echo "wellcome".$dUserName;
        echo "<href='logout.php'>Logout</a>";
}
else{
      echo "<href='login.php'>Logout</a>";
}
if(isset($_GET['page'])){
   $includePage = "includes/".$_GET['page'].".php";
}
else{
     $includePage = "includes/login.php";
}
if(isset($includePage)){
  include($includePage);
} 

インデックスからのサンプルページの読み込み

サンプル.php

if(isset($_SESSION['user']) && $_SESSION['user'] != ''){
       //show your page
}
else{
      //redirect to login page
      echo '<SCRIPT language="JavaScript">window.location="index.php?page=login";</SCRIPT>';
}
于 2012-12-26T10:37:05.863 に答える
0

どうぞ。大量のエラーがありました。

http://www.2shared.com/file/A2V_Ztw8/login.html

これで少なくとも始められるはずです。途中でコメントも。functions.php ファイルは使用しませんでしたが、そこには重要なものは何もありませんでした。また、これを使用する場合は、それに応じて dbConfig ファイルを変更してください。

于 2012-12-16T20:33:33.300 に答える
-1

ファイルを修正しました...

主な問題は関数login.phpにありloginUserます。

この行を変更します。

$sql = "SELECT * FROM users WHERE Username = '$username' AND Password = '$password'";

これに:

$sql = "SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."'";

最初の行の問題は、テキスト '$username' (および '$password' であり、変数$username$password

ご覧のとおり、解決策は、変数参照の前後で文字列を閉じることです。

PS CodeIgniter などのフレームワークを使用してサイトを構築すると、このようなエラーを修正する時間を大幅に節約できるだけでなく、はるかに安全になります。

固定ファイルをアップロードする必要がある場合はお知らせください。

于 2012-12-24T21:21:32.127 に答える