1

ログインフォームの検証にセッション変数を使用しています。ユーザーが正しい名前とパスワードを指定すると、セッション変数が設定され、ページがリダイレクトされます。ページはセッション変数をチェックし、関連するコンテンツをロードします。
私のコードはローカル サーバーでは正常に動作しますが、オンライン サーバーではセッション変数が設定されていません。

admin.php

<?php
    session_start();
    $admin = 0;
    if(isset($_SESSION['admin'])){
          $admin = $_SESSION['admin'];
    }
    if($admin == 0){
?>
 <form action="" class="login">
      <label>User Name :</label>
      <input type="text" class="uname"/>
      <label>Password :</label>
      <input type="password" class="pwd"/>
      <input type="submit" class="lSubmit" value="SUBMIT"/>
      <p class="alert lAlert">test alert</p>
 </form>
<?php }elseif($admin == 1){ ?>
      <h1>Welcome Site Admin..!!</h1>
<?php } ?>

jQuery

$('.lSubmit').click(function(){
var name = $('.uname').val();
var pwd = $('.pwd').val();
    $.post("validation/login.php",{name:name,pwd:pwd}).success(function(data){
       var obj = jQuery.parseJSON(data);
       if(obj.success == 1){
           $('.alert').css('color','#067800');
           window.location = "/admin.php";
       }else{
           $('.alert').css('color','#CC0000');
       }
       $('.lAlert').text(obj.msg);
       $('.lAlert').fadeIn('slow');
    });
    return false;
});

検証/login.php

<?php
     session_start();
     $name = $_POST['name'];
     $pwd = $_POST['pwd'];
     $err['success'] = 0;
     $err['msg'] = '';
     if($name == ''){
         $err['msg'] = 'Name required';
     }else if($pwd == ''){
         $err['msg'] = 'Password required';
     }else if($name != 'admin'){
         $err['msg'] = 'Wrong username';
     }else if($pwd != 'admin'){
         $err['msg'] = 'Wrong password';
     }else{
         $err['msg'] = 'Success';
         $err['success'] = 1;
         $_SESSION['admin'] = 1;
     }
     echo json_encode($err);
 ?>

ユーザーがadminとして名前とパスワードを指定すると、ウェルカム テキストがローカル サーバーに正常に読み込まれました。しかし、オンラインサーバーでは、フォームが再度読み込まれるだけでした。$_SESSION['admin']がオンライン サーバーに設定されていませんでした。誰でも私を助けることができますか?

4

2 に答える 2

4

オンライン サーバーは、Web サーバー ユーザーがセッションを に保存するための十分な権限を提供していないよう/var/lib/php5です。

ホストにチェックを依頼する必要があります。セッションの問題かどうかを確認する最も簡単な方法は、簡単なスクリプトを作成することです。

if (empty($_SESSION['some_counter'])) {
    $_SESSION['some_counter'] = 0;
}

echo $_SESSION['some_counter']++;

次に、ページを数回更新します。変数が変更されていない場合は、それがセッション管理の問題であることを確認できます。これは、ホスティング プロバイダーが解決する必要があります。

彼らがあなたを助けたくない場合は、セッションフォルダーを別のディレクトリに変更して、何が起こるかを確認できます。

編集

/tmpたとえば、確認のためにストレージフォルダーを変更してみることができます-通常、それはサーバー上のすべてのユーザーのパブリックフォルダーです。しかし、セッションを公共の場所に保存するのは悪い習慣です...

session_save_path('/tmp');

役に立たなかった場合 - 使用してみてくださいini_set()

ini_set('session.save_path', '/tmp');

セッションが開始する前に、これらの関数のいずれかを呼び出す必要があります。

役立つはずです;)

于 2012-07-28T11:43:26.737 に答える
0

これを試して:

<?php
session_start() ;
$err = array() ;

if ((empty($_POST["name"])) or ($_POST["name"] != "admin")) {
  $err[] = "Wrong username" ;
}

if ((empty($_POST["pwd"])) or ($_POST["pwd"] != "admin")) {
  $err[] = "Wrong password" ;
}

if (count($err) == 0){
  $message = "Success" ;
   $_SESSION['admin'] = true;  
}
?>

注: Webページに何かを出力する前に、 session_start() を使用する必要があります。この関数を開始する前に、エコー、シンボル、HTMLはありません。Webページの上部に配置します。また、上部にあるのにセッションを開始できない場合は、空の文字列もシンボルと見なされるため、エンコーディングが問題になる可能性があります。BOMなしでファイルをUTF-8でエンコードします

notepad++を使用する

お役に立てれば :)

于 2012-07-28T11:48:20.583 に答える