0

このトピックは以前に Stack で取り上げられたことを認識しており、いくつかの回答を見てきましたが、PHP にかなり慣れていないため、まだ少し行き詰まっています。Web サイトのすべてのページでログインが必要なため、ユーザーはページの読み込み時にログイン ページにリダイレクトされます。各ページの上部には、次のものがあります。

<?
require("log.php");
include_once("config.php"); 
include_once("functions.php"); 
?>

これにより、ユーザーが log.php にリダイレクトされます (新しいコードが追加されています)。

<?
session_name("MyLogin");
session_start();

    if(isset($_SESSION['url'])) 
       $url = $_SESSION['url']; // holds url for last page visited.
    else 
       $url = "index.php"; // default page for

if($_GET['action'] == "login") {
$conn = mysql_connect("localhost","",""); // your MySQL connection data
$db = mysql_select_db(""); //put your database name in here 
$name = $_POST['user'];
$q_user = mysql_query("SELECT * FROM users WHERE login='$name'");

if (!$q_user) {
    die(mysql_error());
}

if(mysql_num_rows($q_user) == 1) {

$query = mysql_query("SELECT * FROM users WHERE login='$name'");
$data = mysql_fetch_array($query);
if($_POST['pwd'] == $data['password']) { 
$_SESSION["name"] = $name;
header("Location: http://monthlymixup.com/$url"); // success page. put the URL you want 
exit;
} else {
header("Location: login.php?login=failed&cause=".urlencode('Wrong Password'));
exit;
}
} else {
header("Location: login.php?login=failed&cause=".urlencode('Invalid User'));
exit;
}
}

// if the session is not registered
if(session_is_registered("name") == false) {
header("Location: login.php");
}

?>

ログインフォームは login.php に含まれています。PHP/log.php に関連する login.pho のコードは次のとおりです。

<?
session_start();

if($_GET['login'] == "failed") {
print $_GET['cause'];
}
?>

<form name="login_form" id="form" method="post" action="log.php?action=login">

私が遭遇した答えは、私が追加する必要があると述べました:

session_start(); // starts the session
$_SESSION['url'] = $_SERVER['REQUEST_URI'];

私が行った各ページの上部に、ページの上部(「require(「log.php」);」の上)に追加し、次を追加します。

if(isset($_SESSION['url'])) 
   $url = $_SESSION['url']; // holds url for last page visited.
else 
   $url = "index.php"; // default page for

ログイン ページに移動し、ログイン成功時のリダイレクトに次の URL を使用します。

header("Location: http://example.com/$url"); // perform correct redirect.

私は、log.php または login.php の先頭に、参照 URL を格納するコードがどこにあるべきか 100% ではありません。

両方に追加しようとしましたが、ユーザー名とパスワードを入力すると、ログイン ページがループします。

誰かがこれを機能させるのを手伝ってくれるのだろうか?

ありがとう、

ニック

4

3 に答える 3

1

あなたの投稿にコメントする権限がないようですので、できる限りお答えします。すべてのシナリオについてお詫び申し上げます。気まぐれで答えられるように最善を尽くしています。

シナリオ1:

ここに示されているように、コードでデータベースを本当に選択していない場合、それが問題になる可能性がありますか?以下のコードはあなたが投稿したコードであることに注意してください。

$db = mysql_select_db(""); //put your database name in here 

シナリオ2:

以下のコードは、私が作成したものでこれまで使用したことのないものです。そのコード行をその下の行に置き換えてみることをお勧めしますか?

if(session_is_registered("name") == false) { // Current
if(isset($_SESSION['name']) == false) { // Potential Replacement

シナリオ3:

次のロジックの場合は、login.phpファイルにも存在します...これが問題になる可能性があります。あなたのサイトにアクセスすると、あなたのフォームがlogin.phpに表示されているのに気づきましたが、あなたのロジックはlog.phpに投稿されています。login.phpがそれ自体を保存し、確立した$ _SESSION変数を上書きする可能性があるため、このコードが「ジャンプ」を除外するのに役立つことを願っています。

session_start(); // starts the session
$_SESSION['url'] = $_SERVER['REQUEST_URI'];

login.phpファイルから取り出すには複雑すぎる場合、そこにある場合でも、「内部」ブレッドクラムを作成するために使用できるコードをまとめたので、履歴を2ページ戻すことができます。 。

    if(!isset($_SESSION['internal_breadcrumbs']))
        $_SESSION['internal_breadcrumbs'] = array();

    $_SESSION['internal_breadcrumbs'][] = $_SERVER['REQUEST_URI'];

    $max_breadcrumbs = 5;

    while(count($_SESSION['internal_breadcrumbs']) > $max_breadcrumbs)
        array_shift($_SESSION['internal_breadcrumbs']);

これにより、最大$ max_breadcrumbs要素を含む配列が作成され、次のように最新のページが最後に表示されます。

Array
(
    [internal_breadcrumbs] => Array
        (
            [0] => /other_page.php
            [1] => /other_page.php
            [2] => /other_page.php
            [3] => /user_page.php <-- desired page
            [4] => /login.php <-- most recent page
        )

)

だから今...あなたはあなたのURLを次のようなものに設定することができます...

// I'm doing - 2 to accommodate for zero indexing, to get 1 from the current page
if(isset($_SESSION['internal_breadcrumbs'])) 
    $url = $_SESSION['internal_breadcrumbs'][count($_SESSION['internal_breadcrumbs']) - 2];
else 
   $url = "index.php"; // default page for

最善を尽くします。これが何らかの形で役に立ったことを願っています。

于 2012-04-25T03:12:04.647 に答える
0

シナリオ 4 で

クライアントから、javascriptコードでXMLHttpRequestをajaxして検証用の専用スクリプトにするログイン/パスワードをテストします(安全のためにモードhttpsで実行します)

応答が正しい場合は、ログイン パスワードをスクリプト サーバーに送信します。

ヒント: パスワードをエンコードする方が安全です。

于 2013-09-12T15:10:15.030 に答える