PHP -cookie session

Cookie:

直接看代码-说明及用法都在代码中:

<?php date_default_timezone_set('Asia/Shanghai'); //设置正确的时区?>
<?php
        /*
         PHP中通过setcookie函数来创造Cookie。使用前必须了解:
             Cookie是 HTTP 头标的组成部分,而头标必须在页面其它内容之前发送,
            它必须最先输出。若在setcookie函数之前输出一个HTML标记或echo语句。
            甚至一个空行都会导致程序出错。
            setcookie() 函数语言自行参考php手册
        */
        
        //这里把过期时间设为0可以直接删除cookie
        //setcookie('visittime',"",0);
        if(isset($_COOKIE['visittime']))
        {
            echo "上次访问的时间是:".$_COOKIE['visittime'];
        }
        else
        {
            //设置cookie的有效时间为300秒,及五分钟
            setcookie('visittime',date('Y-m-d H:i:s'),time()+300);
            //删除setcookie  --这里把过期时间设为0可以直接删除cookie
            //setcookie('visittime',"",time()-1);
        }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
    
</body>
</html>

=====================================================================

Session:

  首先要说一下,session也是一个个存在服务器的文件,而通过session ID来读取的session,session ID可以存在客户端的cookie里,也可以存放在数据库里等等

<?php 
    /*启(创建)动session会话。和cookie一样,使用session前,游览器不能有任何输出 --所以放在最前面很保险
        说明: 
            其实不管放哪里。php代码都会比html先执行。由后台成生游览器可以认识的html所以,这里防止的是
            在其他php代码执行输出前,先进行会话的启动和注册!
    */
    session_start();
    $_SESSION['admin'] = null; //注册一个会话,并且赋空
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
    function yz(id)
    {
        <?php 
            /*这里如果先输出echo的话。会话就会出现错误*/
            //echo '这是错误的!';
            $_SESSION['ad'] = '1234567890';
        ?>
        window.open(id);
    }
</script>
</head>

<body>
    <input type="button" value="跳转" onclick="yz('sessionto.php');"/>
</body>
</html>

session读取:

<?php
        /*读取会话也是一样的,都是使用会话。所以得先启动。*/
        session_start();
        echo "注意读取会话时,前面是可以有html输出的,但是注册会话就不行了<br />";
        echo $_SESSION['ad'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
    
</body>
</html>

==============================================================

设置session失效时两种方法

1-

<?php
    //让session一分钟后失效
    $time = 1*60; //设置session的失效时间
    /*session_set_cookie_params() 函数必须在session_start()函数之前调用
      但是不推荐使用此函数,此函数在一些游览器上会出现问题,所以一般手动设置失效时间
    */
    session_set_cookie_params($time); //使用函数
    session_start(); //初始化设置
    $_SESSION['username'] = 'mr';
?>

2-

<?php
    /*使用 setcookie() 函数可对Session设置失效时间,如让Session在一分钟后失效,关键代码如下*/
    session_start();  //给出session失效时间
    $time = 1*60;
    /*session_name 是session的名称,session_id是判断客户端用户的标识,因为session_id是
      随机产生的唯一名称,所以session是相对安全的。失效时间和cookie的失效时间一样,最后一个参数
      为可选产数,是防止cookie的路劲(就是cookie的作用目录)
      cookie()共有6个参数。 最后两个分别是 作用域名,和是否通过安全连接https
    */
    setcookie(session_name(),session_id(),time()+$time,"/"); //使用setcookie()手动设置session失效时间
    $_SESSION['user'] = 'mr';
    
?>

=====================================================================

客户端禁止Cookie的情况:

  请求端:

<?php session_start(); //还是要首先启动session会话的?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
    <!--
        当客户端禁止Cookie时,页面见的session传递就会失效,因为session_id是存放在cookie里的。
        所以这是我们要用GET的方式传递Session_ID ,但在之前我们必须先启动session
    -->
    <form >
        <input type="submit" value="提交" />
    </form>
</body>
</html>

接收端:

<?php
    /*原理 -- session原理为请求该页面之后会产生一个session_id ,如果这个时候禁止了Cookie就无法传递
      session_id , 在请求下一个页面时候将会重新产生一个session_id ,这样就造成了session在页面传递
      失效.
    */
    $sess_name = session_name(); //获取session名称 --获取session是那个文件
    $sess_id = $_GET[$sess_name]; //根据session名称获取session_id Get方式
    session_id($sess_id); //关键步骤 -根据sessionid获取来确定信息
    session_start();
    $_SESSION['admin'] = 'mrsoft';
?>

=====================================================================