PHP

PHP 知识量:7 - 20 - 67

2.5 页面交互><

cookie- 2.5.1 -

php可以帮助我们创建出动态网站,用户可以与服务器进行各种交互。但是这种交互依然是无状态的,也就是说多个页面间没有任何联系,即使每一个页面都是访问同一个网站,甚至是同一个网页也是如此。要想让同一个网站页面间相互认识或传递什么信息,需要借助一些特别的家伙。

cookie是web服务器存储在客户端电脑上的小文件,它由一些“名-值”对组成,还可以设置cookie的过期时间。每当客户访问服务器网页时,服务器会将cookie写入客户电脑上,之后服务器就可以通过读取cookie来确认客户身份了。cookie通过setcookie()方法和$_COOKIE超全局变量来使用,具体使用方法如下所示:

HTML代码(index.php)如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $name = 'john';
        setcookie('username', $name);
        ?>
        <a href="page2.php">page2</a>
    </body>
</html>

HTML代码(page2.php)如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>page2</title>
    </head>
    <body>
        <?php
        $name = $_COOKIE['username'];
        echo "$name";
        ?>
        <a href="index.php">index</a>
    </body>
</html>

以上代码中,index.php中设置了一个cookie,它有两个参数,第一个是cookie变量名,第二个是cookie变量值。当index.php运行时,会向客户端电脑写入这个cookie文件。点击链接page2后,会跳转到page2.php,这时会通过$_COOKIE超全局变量读取存储在客户端的cookie文件,并将其值打印出来。

需要注意的是:要想让cookie发挥作用,浏览器必须设置为允许网页使用cookie,以下是chrome浏览器的设置示例:

1221.JPG

session- 2.5.2 -

session会话是另一个在客户端与服务器间建立联系的方法。session与cookie非常类似,它与cookie不同之处在于,它不是将有关文件写到客户端,而是在客户端浏览器未关闭前一直驻留在服务器端。因此,它是不依赖客户端浏览器设置情况的。

sesseion通过$_SESSION超全局变量来设置和读取数据。

HTML代码(index.php)如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        session_start();
        $name = 'john';
        $_SESSION['username'] = $name;
        ?>
        <a href="page2.php">page2</a>
    </body>
</html>

HTML代码(page2.php)如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>page2</title>
    </head>
    <body>
        <?php
        session_start();
        $name = $_SESSION['username'];
        echo "$name";
        ?>
        <a href="index.php">index</a>
    </body>
</html>

以上代码中,index.php页面中使用$_SESSION超全局变量设置了一个session变量“username”。点击链接后,页面跳转到page2.php,再次通过$_SESSION超全局变量读取变量并打印出来。这里一定要特别注意:在使用session的页面中,首先要通过session_start()函数启用session会话,否则session无法使用。

get- 2.5.3 -

php的get方法是通过超全局变量$_GET来实现的,这个变量的值包含在URL查询字符串中,通常是键-值对的形式。例如:

http://www.pnotes.cn/index.php?mark=firstPage

其中,mark=firstPage就是一组键-值对,可以在接收页面中通过$_GET超全局变量获取它们。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $mark = $_GET['mark'];
        echo "The mark is $mark";
        ?>
    </body>
</html>

以上代码中,使用$_GET['mark']获取了URL中的mark值,然后打印出来。这样,index.php页面会显示“The mark is firstPage”。

post- 2.5.4 -

与get方法类似,php的post方法是通过超全局变量$_POST来实现的。它使用HTTP协议中的post方法(提交数据)在页面间传递数据。其传输的数据并不设置在URL中,因此安全性更好,可以传输的数据量也更大。

表单页面(prev.php):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>prev</title>
    </head>
    <body>
        <form action="index.php" method="post">
            Input the value of mark:
            <input name="mark" type="text"/>
            <input type="submit"/>
        </form>
    </body>
</html>

接收页面(index.php):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $mark = $_POST['mark'];
        echo "The mark is $mark";
        ?>
    </body>
</html>
  • 在表单页面中,定义了一个文本输入框,可以输入mark的值,点击提交后,表单数据提交到接收页面index.php。

  • 在接收页面中,通过_POST['mark']获取了表单中的mark值,然后打印出来。如果在表单页面输入了“ok”,index.php页面会显示“The mark is ok”。