【问题标题】:Why are my cookies not working PHP为什么我的 cookie 不工作 PHP
【发布时间】:2019-01-11 20:48:46
【问题描述】:

我觉得好像我把所有东西都放在了正确的地方,但是如果有人能发现我的错误,我的 cookie 似乎并没有被存储,将不胜感激。

我可以正常登录,只是似乎没有保存 cookie,因为当我注销时,我的登录字段中没有出现任何内容。

索引页面 -

<form action="controller/authentication.php" method="post">
           <div class="text-danger"><?php if(isset($message)) { echo $message; } ?></div>
                <div class="form-group">  
                 <label for="login">Username</label>
                 <input name="member_name" type="text" value="<?php if(isset($_COOKIE["member_login"])) { echo $_COOKIE["member_login"]; } ?>" class="form-control" />
                </div>
                <div class="form-group">
                 <label for="password">Password</label>
                 <input name="member_password" type="password" value="<?php if(isset($_COOKIE["member_password"])) { echo $_COOKIE["member_password"]; } ?>" class="form-control" />
                </div>
                <div class="form-group">
                 <input type="checkbox" name="remember" <?php if(isset($_COOKIE["member_login"])) { ?> checked <?php } ?> />
                 <label for="remember-me">Remember me</label>
                </div>
                <div class="form-group">
                 <div><input type="submit" name="login" value="Login" class="btn btn-success"></span></div>
                </div>
                </form>

认证页面-

//start session management


 session_start();
//connect to the database
require('../model/connection.php');
//retrieve the functions
require('../model/functions_users.php');

//retrieve the username and password entered into the form
$name = $_POST['member_name'];
$password = $_POST['member_password'];
if(isset($_POST["login"]))
{
 if(!empty($_POST["member_name"]) && !empty($_POST["member_password"]))
 {
   //call the retrieve_salt() function
   $result = retrieve_salt($name);

   //retrieve the random salt from the database
   $salt = $result['salt'];
   //generate the hashed password with the salt value
   $password = hash('sha256', $password.$salt);

   //call the login() function
   $count = login($name, $password);

  if($count == 1)
  {
   if(!empty($_POST["remember"]))
   {
    setcookie ("member_login",$name,time()+ (10 * 365 * 24 * 60 * 60));
    setcookie ("member_password",$password,time()+ (10 * 365 * 24 * 60 * 60));
    $_SESSION["user"] = $name;
   }
   else
   {
    if(isset($_COOKIE["member_login"]))
    {
     setcookie ("member_login","");
    }
    if(isset($_COOKIE["member_password"]))
    {
     setcookie ("member_password","");
    }
   }
   header("location:../view/products.php");
  }
  else
  {
   $message = "Invalid Login";
  }
 }
 else
 {
  $message = "Both are Required Fields";
 }
}



else
{
    //if login not successful, create an error message to display on the login page
    $_SESSION['error'] = 'Incorrect username or password. Please try again.';
    //redirect to login.php
    header('location:../index.php');
    }

登录功能-

function retrieve_salt($username)
{
    global $conn;
    $sql = 'SELECT * FROM customer WHERE username = :username';
    $statement = $conn->prepare($sql);
    $statement->bindValue(':username', $username);
    $statement->execute();
    $result = $statement->fetch();
    $statement->closeCursor();
    return $result;
}

//create a function to login
function login($username, $password)
{
    global $conn;
    $sql = 'SELECT * FROM customer WHERE username = :username AND password = :password';
    $statement = $conn->prepare($sql);
    $statement->bindValue(':username', $username);
    $statement->bindValue(':password', $password);
    $statement->execute();
    $result = $statement->fetchAll();
    $statement->closeCursor();
    $count = $statement->rowCount();
    return $count;
}

编辑添加登录功能

【问题讨论】:

  • 添加login功能码。
  • 对此表示抱歉
  • var_dump($_COOKIE); 这说明了什么?或var_dump($_COOKIE["member_login"]);?
  • 是否启用错误报告并设置为捕获和显示 (php) 错误?
  • 我可以把 var_dump($_COOKIE);在我的 index.php 页面中?如果是这样,我得到 ... array(5) { ["lastVisit"]=> string(16) "04/08/18 09:10am" ["_wpfuuid"]=> string(36) "edd72cf-1bb5-4a5f -8c3e-2f3ec5f56011" ["_ga"]=> 字符串(25) "GA1.1.68287711.1524371126" ["Phpstorm-9d11b177"]=> 字符串(36) "2564a120-bd94-48f0-8d16-8ba52b4e5854" ["PHPSESSID "]=> 字符串(26) "5bpd92tebf6ckr1mms6n0na4fl" }

标签: php html mysql session cookies


【解决方案1】:

所以我的问题是我从其他文件夹中调用文件,这些文件在 setcookie 语句中需要“/”。

所以我改变了 -

setcookie ("member_login",$name,time()+ (10 * 365 * 24 * 60 * 60));

到-

setcookie ("member_login",$name,time()+ (10 * 365 * 24 * 60 * 60) , '/');

如果您无法理解为什么您似乎无法查看您的 cookie var_dump($_COOKIE);

是一个很棒的功能

希望这对某人有所帮助。

【讨论】:

  • 它所在的域有时需要斜线。我引用手册(php.net/manual/en/function.setcookie.php):“cookie 可用的服务器上的路径。如果设置为'/',则 cookie 将在整个域中可用。如果设置为' /foo/', cookie 只会在 /foo/ 目录和域的 /foo/bar/ 等所有子目录中可用。默认值为设置 cookie 的当前目录。” i> 以及那里的更多信息和示例(续)...
  • ...一个是setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 2014-07-15
  • 2014-05-17
  • 2017-09-20
  • 2012-04-14
  • 2016-09-15
相关资源
最近更新 更多