PHP cookies设置

PHP cookies设置,php,cookies,Php,Cookies,我不想这么说,但我一直在做一项本应是30分钟的任务,整整6个小时,几乎没有进展。我试图在表单中捕获姓名和电子邮件,并将其设置为持续10分钟的cookies。当cookies处于活动状态时,页面应跳过表单,只显示输入。我在cookies和会话中都尝试过,但无法使其正常工作。 在这一点上,我已经编写并删除了至少一百行代码,但我真的看不出问题出在哪里。这是我第一次使用PHP。任何帮助都将不胜感激。 当前,此代码创建表单,获取信息并将其正确发布到页面。当我返回页面时,它再次显示表单。我想这意味着饼干没有

我不想这么说,但我一直在做一项本应是30分钟的任务,整整6个小时,几乎没有进展。我试图在表单中捕获姓名和电子邮件,并将其设置为持续10分钟的cookies。当cookies处于活动状态时,页面应跳过表单,只显示输入。我在cookies和会话中都尝试过,但无法使其正常工作。 在这一点上,我已经编写并删除了至少一百行代码,但我真的看不出问题出在哪里。这是我第一次使用PHP。任何帮助都将不胜感激。 当前,此代码创建表单,获取信息并将其正确发布到页面。当我返回页面时,它再次显示表单。我想这意味着饼干没有凝固/粘滞

<?php 
 if (!empty($_POST)) {
  setcookie('Cname',$_POST['name'], time()+600);
  setcookie('Cemail', $_POST['email'], time()+600);
//  header("Location:HW2.php");
 } 

?>
<html>
<head>
<title> Assignment 2 Alcausin </title>
</head>
<body>

<?php

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

$visibleForm = True;
if(isset($_COOKIE['name'])){
    $visibleForm = False;
}
if(isset($_POST['submit'])){
    $visibleForm = False;
    echo "Your Name: ";
    echo $_COOKIE['Cname'];
    echo "<br>";
    echo "Your Email: ";
    echo $_COOKIE['Cemail'];
}
if($visibleForm){ // close php if form is displayed
    ?>      
<form action ="HW2.php" method="post">
    Name:<font color = red>*</font> <input type="text" name="name"><br>
    E-mail:<font color = red>*</font> <input type="text" name="email"><br>
    <input type="submit" name="submit" value="Submit">
</form>
<?php   // back to php
}
?>

</body>
</html>

作业2阿尔考辛
姓名:*
电子邮件:*

首先,您必须在代码的最高级别添加session_start(),因为这对于任何一项工作都是必不可少的。session_start()实际生成PHPSESSID cookie,也是会话标识符;如果使用session_start(),则不需要使用setcookie()为PHPSESSID cookie设置任何内容

为了实现您想要实现的基本方法,我会尝试在页面加载时设置会话,如果有当前会话,那么它会像您所说的那样跳过表单

$_SESSION['SESSID'] = $someVar;
$_SESSION['SESSNAME'] = "someOtherVar";
然后在表单之前,检查是否使用

if(isset($someVar) && isset($someOtherVar))
你知道交易


然后创建一个按钮来执行会话_destroy(),以结束当前会话。

我使用重写了您的脚本,这样您的数据实际上存储在服务器上,而客户端只有一个会话cookie,它是对服务器端数据的引用,因此客户端无法篡改该数据

虽然这对你的家庭作业可能并不重要,但当你处理用户帐户和权限时,这一点绝对重要(想象一个“管理员”cookie,它告诉你用户是否是管理员-任何人都可以手动设置该cookie,仅此而已,他是你网站上的管理员)

这没有经过测试,可能根本不起作用——如果是这样的话,请随意否决我的答案

将session_start()添加到代码顶部,然后再添加除开始php标记之外的任何内容
<?php

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
ini_set("session.cookie_lifetime","600"); // sets the session cookie's lifetime to 10 minutes / 600 seconds

session_start(); // starts the session, this will create a new session cookie on the client if there's not one already

if (isset($_POST["name"]) && isset($_POST["email"])) { // if there's POST data
    $_SESSION["name"] = $_POST["name"]; // this saves your values to the session so you can retrieve them later
    $_SESSION["email"] = $_POST["email"]; // same here
};

?>
<html>
<head>
<title> Assignment 2 Alcausin </title>
</head>
<body>
<?php

$visibleForm = !isset($_SESSION["name"]); // visibleForm will be the opposite of isset, so if there's a "name" in the session then the form will be invisible

if ($visibleForm) { // if there's no session data, we display the form
    echo '<form action ="HW2.php" method="post">Name:<font color = red>*</font> <input type="text" name="name"><br>E-mail:<font color = red>*</font> <input type="text" name="email"><br><input type="submit" name="submit" value="Submit"></form>';
} else { // this means there is some data in the session and we display that instead of the form
    echo "Your Name: ";
    echo $_SESSION["name"];
    echo "<br>";
    echo "Your Email: ";
    echo $_SESSION["email"];
};
?>

</body>
</html>