Maison développement back-end tutoriel php 变量的“追随”:cookie与session_PHP

变量的“追随”:cookie与session_PHP

Jun 01, 2016 pm 12:32 PM
cookie session 使用 函数 变量

Cookie

变量的“追随”:cookie与session 作者:    来源: 互联网     浏览数:44

放大阅读

     字号选择:〖大 中 小〗

在很多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用一组变量来“追随”访客。实现变量“追随”有很多种方法,比较用得多的是cookie和session。下面我们用时下很流行的PHP为大家讲解一下它们的使用。

一.Cookie的使用

  Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到客户端。在Cookie生效之后及失效之前,客户每次发出页面请求的时候,都会把Cookie一块发送到服务器,只要我们针对它进行相应的处理,就可以实现变量“追随”。

1. 设置一个Cookie变量

  设置一个Cookie变量,PHP使用的函数是:

<code>int setcookie(string name, string value, int expire,
            string path, string domain, int secure);</code>
Copier après la connexion

  其中name是Cookie变量名称标识,你在PHP中将可以象使用普通变量名一样来用它引用Cookie变量。value是Cookie变量的初始值,expire 表示该Cookie变量的有效时间;path 为该Cookie变量的相关路径;domain 表示Cookie变量的网站;secure 则需在 https 的安全传输时才有效。

  例如我们要设置一个变量username,它的值是字符串“bluewind”,我们可以这么写代码:

<code>setcookie (“username”,“bluewind”); //这两个参数是setcookie必要的。</code>
Copier après la connexion

  我们还想给这个变量设置有效时间来限制操作超时等,比如说10分钟:

<code>setcookie (“username”,“bluewind”, 600000); //有效时间的单位是毫秒。</code>
Copier après la connexion

  注意:setcookie和header函数一样,需要放在任何能向客户端输出的语句之前。

2. 销毁一个变量

  销毁Cookie变量只要将它的value设为空(“”)就可以了,如想销毁上面那个变量只要再写一次:

<code>setcookie (“username” ,“”);</code>
Copier après la connexion

  就可以了。这常用作安全退出之用。

3. Cookie的有效范围和生存期

  Cookie的有效范围(也就是说在这个范围的页面都能得到这个Cookie变量)默认的是该目录及其子目录,当然你可以用setcookie的path和domain参数进行修改。如果你不对cookie的expire进行设置(参见1. 设置一个Cookie变量中的例子),那么当你离开网站的页面,cookie也同时得到自动销毁。

  http://www.netscape.com/newsref/std/cookie_spec.html是 cookie 原创者 Netscape 所提供的完整介绍信息。

二,session的使用

  session变量,也就是会话级变量,是访客在整个和网站交互的过程中都存在的公有变量。在客户端不支持有可能不支持cookie的时候(比如linux下的lynx……呵呵,惨了点),我们为了保证数据正确安全,就需要采用session变量。Session在各种网页语言中的实现方式不一样,PHP在4.0后也开始支持它了。首先,让我们来看看一个简单的例子:

<code>
            test.php
            -----------
            
            session_start();
            session_register(var); //注册变量var
            $var="这是SESSION变量的值"; //var变量已经被作为session变量
            ?>
            test1.php
            ------
            
            session_start();
            session_register(var);
            echo $var; //输出:“这是SESSION变量的值”
            ?>
            </code>
            
Copier après la connexion

1、初始一个session

  如果PHP的设置自动session并没有开启的话,需要使用session_start()函数来初始化一个session,这个函数的用法如下:

<code>: boolean session_start(void);</code>
Copier après la connexion

  它的作用是初始化一个新的 Session,若该客户已在 Session 之中,则连上原 Session。本函数没有参数,且返回值均为 true。

2、在session中注册一个变量

  你要在session保存的变量都必须使用下列函数对变量进行注册:

<code>boolean session_register(string name);</code>
Copier après la connexion

  本函数在全局变量中增加一个变量到目前的 Session 之中。参数 name 即为欲加入的变量名。成功则返回true 值。

  然后你就可以直接使用变量名对它进行赋值,这个值就会被保存下来。

3、使用session变量的值

  如上例所示,只要你再在新的页面重复上两个步骤(除了赋值外),就可以直接使用session变量。

4、session的销毁

  如果你只是想注销一个变量而不是摧毁整个变量的话,那需要使用函数:

<code>boolean session_unregister(string name);</code>
Copier après la connexion

  用法很简单,参数 name 即为欲删除的变量名。成功则返回 true 值。

  但是,如果要整个“摧毁”session变量的话,比如说安全退出什么的,使用函数:

<code>boolean session_destroy(void);</code>
Copier après la connexion

  本函数结束目前的 Session。本函数没有参数,且返回值均为 true。

5、其它有用的session函数

a、 检查变量是否注册

<code>boolean session_is_registered(string name);</code>
Copier après la connexion

  本函数可检查目前的 Session 之中是否已有指定的变量注册。参数 name 即为欲检查的变量名。成功则返回true 值。

b、 给注册变量归null

<code> void session_unset(void); </code>
Copier après la connexion

  这个函数可以把当然注册的所有的session变量置为空。注意它不是unregister,也不同于destroy。 下面这个例子,对此函数做了很好的说明。

<code>
            <?php session_register('a','b','c'); //auto-session-start
            $a=1;
            $b=2;
            $c=3;
            session_unregister('a'); //unregistrered $a
            echo "A: $a - reg:".session_is_registered('a')." ";
            // but the global $a remains
            session_unset(); // unsets $b und $c
            echo "B:$b - reg:".session_is_registered('b')." ";
            // the registration remains !
            echo "C:$c - reg:".session_is_registered('c')." ";
            echo session_encode();
            ?>
            输出:
            A: 1 - reg:
            B: - reg:1
            C: - reg:1
            !b|!c|
            </code>
Copier après la connexion

c、定制你自己的session处理方法

<code>
            void session_set_save_handler (string open, string close, string read,
            string write, string destroy, string gc)
            </code>
Copier après la connexion

  这个函数可以定义用户级的session的保存函数(打开、关闭、写入等)。比如,我们想把session保存在本地的一个数据库中时,本函数就很有用了。缺省情况下,每个session存贮在系统临时目录的一个个独立文件中(例如在unix系统中为/tmp)。这适合或不适合,依你的需求而言。例如:如果你的支持php的web服务器分布在不同的机器上,你不能很容易地共享它们之间的session(当然,你也可以将sessions保存在NFS共享中)。另一个潜在的问题是你机器上的数千或数百万个session文件使你的文件系统变得散乱 。注意:这个函数是在4.0b4版本后才出现的。使用本函数前,先要配置php.ini文件,session.save_hadler=user ,否则,session_set_save_handler()不会生效。

  此外,根据我的测试,你如果想让这样的session跨页面使用,还要在每一个用到session的脚本文件中加入你自定的函数及session_set_save_handler,所以,最好的方法是做成一个单独的文件,在每一个要用到session的脚本中用include来包含进来。

  下面这个例子提供了一个最基本的session保存法,类似于默认的files方法。如果你想用数据库来实现,这也是很容易做到的。

<code>
            Example:session_set_save_handler() example
            <?php function open ($save_path, $session_name) {
            global $sess_save_path, $sess_session_name;
            $sess_save_path = $save_path;
            $sess_session_name = $session_name;
            return(true);
            }
            function close() {
            return(true);
            }
            function read ($id) {
            global $sess_save_path, $sess_session_name;
            $sess_file = "$sess_save_path/sess_$id";
            if ($fp = @fopen($sess_file, "r")) {
            $sess_data = fread($fp, filesize($sess_file));
            return($sess_data);
            } else {
            return("");
            }
            }
            function write ($id, $sess_data) {
            global $sess_save_path, $sess_session_name;
            $sess_file = "$sess_save_path/sess_$id";
            if ($fp = @fopen($sess_file, "w")) {
            return(fwrite($fp, $sess_data));
            } else {
            return(false);
            }
            }
            function destroy ($id) {
            global $sess_save_path, $sess_session_name;
            $sess_file = "$sess_save_path/sess_$id";
            return(@unlink($sess_file));
            }
            /*********************************************
            * WARNING - You will need to implement some *
            * * sort of garbage collection routine here. *
            * *********************************************/
            function gc ($maxlifetime) {
            return true;
            }
            session_set_save_handler
            ("open", "close", "read", "write", "destroy", "gc");
            session_start();
            // proceed to use sessions normally
            // 现在你就可以象往常一样地使用session了。
            ?>
            </code>
Copier après la connexion

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Tutoriel BTCC : Comment lier et utiliser le portefeuille MetaMask sur l'échange BTCC ? Tutoriel BTCC : Comment lier et utiliser le portefeuille MetaMask sur l'échange BTCC ? Apr 26, 2024 am 09:40 AM

MetaMask (également appelé Little Fox Wallet en chinois) est un logiciel de portefeuille de cryptage gratuit et bien accueilli. Actuellement, BTCC prend en charge la liaison au portefeuille MetaMask. Après la liaison, vous pouvez utiliser le portefeuille MetaMask pour vous connecter rapidement, stocker de la valeur, acheter des pièces, etc., et vous pouvez également obtenir un bonus d'essai de 20 USDT pour la première liaison. Dans le didacticiel du portefeuille BTCCMetaMask, nous présenterons en détail comment enregistrer et utiliser MetaMask, ainsi que comment lier et utiliser le portefeuille Little Fox dans BTCC. Qu'est-ce que le portefeuille MetaMask ? Avec plus de 30 millions d’utilisateurs, MetaMask Little Fox Wallet est aujourd’hui l’un des portefeuilles de crypto-monnaie les plus populaires. Son utilisation est gratuite et peut être installée sur le réseau en tant qu'extension

Conseils pour créer dynamiquement de nouvelles fonctions dans les fonctions Golang Conseils pour créer dynamiquement de nouvelles fonctions dans les fonctions Golang Apr 25, 2024 pm 02:39 PM

Le langage Go propose deux technologies de création de fonctions dynamiques : la fermeture et la réflexion. les fermetures permettent d'accéder aux variables dans la portée de la fermeture, et la réflexion peut créer de nouvelles fonctions à l'aide de la fonction FuncOf. Ces technologies sont utiles pour personnaliser les routeurs HTTP, mettre en œuvre des systèmes hautement personnalisables et créer des composants enfichables.

Considérations relatives à l'ordre des paramètres dans la dénomination des fonctions C++ Considérations relatives à l'ordre des paramètres dans la dénomination des fonctions C++ Apr 24, 2024 pm 04:21 PM

Dans la dénomination des fonctions C++, il est crucial de prendre en compte l’ordre des paramètres pour améliorer la lisibilité, réduire les erreurs et faciliter la refactorisation. Les conventions courantes d'ordre des paramètres incluent : action-objet, objet-action, signification sémantique et conformité de la bibliothèque standard. L'ordre optimal dépend de l'objectif de la fonction, des types de paramètres, de la confusion potentielle et des conventions du langage.

Comment écrire des fonctions efficaces et maintenables en Java ? Comment écrire des fonctions efficaces et maintenables en Java ? Apr 24, 2024 am 11:33 AM

La clé pour écrire des fonctions Java efficaces et maintenables est la suivante : restez simple. Utilisez un nom significatif. Gérer des situations particulières. Utilisez une visibilité appropriée.

Collection complète de formules de fonctions Excel Collection complète de formules de fonctions Excel May 07, 2024 pm 12:04 PM

1. La fonction SOMME permet de sommer les nombres d'une colonne ou d'un groupe de cellules, par exemple : =SOMME(A1:J10). 2. La fonction MOYENNE permet de calculer la moyenne des nombres dans une colonne ou un groupe de cellules, par exemple : =AVERAGE(A1:A10). 3. Fonction COUNT, utilisée pour compter le nombre de nombres ou de texte dans une colonne ou un groupe de cellules, par exemple : =COUNT(A1:A10) 4. Fonction IF, utilisée pour effectuer des jugements logiques basés sur des conditions spécifiées et renvoyer le résultat correspondant.

Comparaison des avantages et des inconvénients des paramètres par défaut et des paramètres variables des fonctions C++ Comparaison des avantages et des inconvénients des paramètres par défaut et des paramètres variables des fonctions C++ Apr 21, 2024 am 10:21 AM

Les avantages des paramètres par défaut dans les fonctions C++ incluent la simplification des appels, l’amélioration de la lisibilité et l’évitement des erreurs. Les inconvénients sont une flexibilité limitée et des restrictions de dénomination. Les avantages des paramètres variadiques incluent une flexibilité illimitée et une liaison dynamique. Les inconvénients incluent une plus grande complexité, des conversions de types implicites et des difficultés de débogage.

Quels sont les avantages des fonctions C++ renvoyant des types référence ? Quels sont les avantages des fonctions C++ renvoyant des types référence ? Apr 20, 2024 pm 09:12 PM

Les avantages des fonctions renvoyant des types référence en C++ incluent : Améliorations des performances : le passage par référence évite la copie d'objets, économisant ainsi de la mémoire et du temps. Modification directe : L'appelant peut modifier directement l'objet de référence renvoyé sans le réaffecter. Simplicité du code : le passage par référence simplifie le code et ne nécessite aucune opération d'affectation supplémentaire.

Quelle est la différence entre les fonctions PHP personnalisées et les fonctions prédéfinies ? Quelle est la différence entre les fonctions PHP personnalisées et les fonctions prédéfinies ? Apr 22, 2024 pm 02:21 PM

La différence entre les fonctions PHP personnalisées et les fonctions prédéfinies est la suivante : Portée : les fonctions personnalisées sont limitées à la portée de leur définition, tandis que les fonctions prédéfinies sont accessibles tout au long du script. Comment définir : les fonctions personnalisées sont définies à l'aide du mot-clé function, tandis que les fonctions prédéfinies sont définies par le noyau PHP. Passage de paramètres : les fonctions personnalisées reçoivent des paramètres, tandis que les fonctions prédéfinies peuvent ne pas nécessiter de paramètres. Extensibilité : des fonctions personnalisées peuvent être créées selon les besoins, tandis que les fonctions prédéfinies sont intégrées et ne peuvent pas être modifiées.

See all articles