php 设置cookie路径例子总结

 更新时间:2016年11月25日 17:37  点击:2224
对于cookie path很多的朋友不以为燃了这样会发现就是因为一个小点或一个路径问题测试了一天发现读取不了cookie值了,今天我就来给大家介绍cookie中路径的一些例子与注意细节。

先看phpcms中的一个函数

 代码如下 复制代码

phpcms/libs/classes/param.class.php
/**
     * Set Cookie
     * @param string $var
     * @param string $value
     * @param int $time
     * @param string $path
*/

    public static function set_cookie($var, $value = '', $time = 0, $path = '') {
        $time = $time > 0 ? $time : ($value == '' ? SYS_TIME - 3600 : 0);
        $s = $_SERVER['SERVER_PORT'] == '443' ? 1 : 0;
        $var = pc_base::load_config('system','cookie_pre').$var;
        $path = $path == '' ? pc_base::load_config('system','cookie_path') : $path;
        $_COOKIE[$var] = $value;
        if (is_array($value)) {
            foreach($value as $k=>$v) {
                setcookie($var.'['.$k.']', sys_auth($v, 'ENCODE'), $time, $path, pc_base::load_config('system','cookie_domain'), $s);
            }
        } else {
            setcookie($var, sys_auth($value, 'ENCODE'), $time, $path, pc_base::load_config('system','cookie_domain'), $s);
        }
    }
param::set_cookie('auth', '',time()-1,'/');

这个函数与cookie没什么区别我们先不介绍它,可能很多朋友懂,下面我们再看

setcookie函数的第四个参数为cookie路径,关于路径的设置,本文做了一些尝试,下面是两个测试页(直接用url表示路径和文件目录了):

  http://localhost/test/cookie/father.php

  http://localhost/test/cookie/child/child.php

 

 代码如下 复制代码

<?php
//location:  locahost/test/cookie/father.php

//setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
setcookie("father_set_1_/","@@@@",time()+24*3600,"/");
setcookie("father_set_2_/child","@@@@",time()+24*3600,"/child/");
setcookie("father_set_3_test/cookie/child","@@@@",time()+24*3600,"/test/cookie/child/");

print_r($_COOKIE);
?>

 

 代码如下 复制代码

<?php
//location:   localhost/test/cookie/child/child.php

//setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
setcookie("child_set_0","@@@@",time()+24*3600);
setcookie("child_set_1_/","@@@@",time()+24*3600,"/");
setcookie("child_set_2_/child","@@@@",time()+24*3600,"/child");
setcookie("child_set_3_/test/cookie/child/","@@@@",time()+24*3600,"/test/cookie/child/");

print_r($_COOKIE);
?>

分别按如下顺序访问页面father.php—>child.php—>father.php—>child.php,使用firebug查看,分别有如下结果:


php 设置cookie路径例子总结

 第一访问father.php

  图中可以看出,本次请求服务端做出响应,打印了$_COOKIE数组,但数组为空。设置了三个cookie值,分别是:"father_set_1_/"、"father_set_2_/child"、"father_set_3_test/cookie/child",它们对应的路径为"/"、"/child"、"/test/cookie/child",其中"/"指的是站点根目录。
  第一次请求father.php时,初始状态下客户端没有相关的cookie记录,在上图中只有已收到的cookie,没有已发送的cookie,则打印$_COOKIE数组时是没有输出。
  从上面这点可以看出,页面的每次请求cookie的变化是:页面请求时浏览器发送客户端已有的cookie,服务器端接收cookie将其存入数组$_COOKIE数组中供程序使用;而在服务器端响应本次请求设置的cookie尚未发送到客户端时$_COOKIE数组中是没有记录的。
 
php 设置cookie路径例子总结
第一次访问child.php

  访问child.php能看到请求中发送了两个cookie分别为"father_set_1_/"、"father_set_3_test/cookie/child",接收到四个cookie分别是"child_set_0"、"child_set_1_/"、"child_set_2_/child"、"child_set_3_/test/cookie/child/"。
  页面打印出的$_COOKIE数组中有两个值,分别是请求时发送的数据。
  这里有个貌似奇怪的地方,打印出的$_COOKIE数组只有两个呢,第一个father.php页面不是设置了三个cookie值吗,为什么不能访问"father_set_2_/child"呢?
  这里仔细分析就没有什么奇怪的了,浏览器每次发出请求只发送父级路径和当前路径下的cookie给服务器,服务端的$_COOKIE数组也就是来自每次请求中的发送cookie,这也意味着一个页面只能访问路径设置为当前页面路径和父路径的cookie,不能访问兄弟路径的cookie。
 
php 设置cookie路径例子总结
第二次访问father.php

  第二次访问father.php打印出了二个值,也就是本次请求发送了两个值,也就是意味着father.php能访问两个值它们分别是"father_set_1_/"、"child_set_1_/"对应的路径都是"/"。
  这里就能看出来father.php虽然设置了三个cookie,但由于路径的原因浏览器请求时并没有发送其他子路径的cookie以至于不能读取。其中"child_set_1_/"是子路径下的页面设置的cookie,由于路径是本页面所在路径则能读取。
  还有一点值得注意的是,这次访问时没能打印出"child_set_0"的值,在child.php中"child_set_0"的路径是为空的,这点是默认为当前路径,而不是站点根目录的,所有子路径想设置cookie让父路径的页面访问则需要设置路径的。
 
php 设置cookie路径例子总结
第二次访问child.php
  再次访问child.php一共能打印出5个值,没能打印出路径为"/child"的cookie,这点说明浏览器只发送“直系”路径关系的cookie值

好了现在不知道你对cooke路径设置懂了没有其它就是我们要使用那个就设置那个路径了,如果是多域名就直接设置主域名就可以了,如果是目录指定目录就行了,如果是单文件指定单文件路径就可以了哦。

下面来给各位同学介绍关于phpmyadmin无法登录提示please check errors given in your PHP and/or webserver,希望例子对各位有帮助。


今天帮别人弄网站的时候要修改数据库字段

然后发现苦逼的事情

phpmyadmin无法登陆

访问 PHPMyAdmin 提示

phpMyAdmin - Error

Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.

好吧 无语了

赶紧查资料

说这个问题是因为session存放目录的权限问题。session目录你要找到PHP目录下的php.ini文件,看你设定的  session 存放目录为哪个路径,找到其所在的文件夹,给予Internet来宾账户session目录的控制权限。

我是按照以下操作解决的:

在php.ini找到session.save_path 这一行, session.save_path = "D:/php/tmp"  那么你就对tmp文件夹进行权限设定。 Internet来宾账户就是IUSR开头的账户,我给了其最高为写入权限,刷新可以看到登陆界面了。激动哈,所以记录下方法,以免遗忘。

另外一个是将php.ini中的session.auto_start的值改为1(启动),默认是0(禁用).

然后重启下

我们使用date函数直接显示后面带有date("Y-m-d H:i:s",$t);发现显示的为1970-01-01了,这个问题对于新手来讲可能不好理解,但对于做过几年的高手来讲小菜了。

如date("Y-m-d H:i:s",$t);。但是这样是无法调出正确的时间的,该值为空,所以会显示1970-01-01的问题

问题是国类$t是一个不正确的时间截了,我们只要利用如$t =time()这样就可以了显示正确了。

例子

echo date("Y-m-d",time());

输入是

2014.05.11

我碰到过这样的一个问题也给大家分析一下,碰到存储数据库的日期格式为 2009-1-22 了,如果我们还使用


echo date("Y-m-d",'2009-1-22');这样也会有问题 1970-01-01

echo date("Y-m-d",'abc'); 也会有问题 1970-01-01

上传文件出现问题, 检查了一遍发现是php.ini配置问题我们只要修改php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项即可。

php的配置:

 代码如下 复制代码

upload_max_filesize = 200M


nginx配置:

 代码如下 复制代码

client_max_body_size 200m;

按说没啥了额, 又怀疑是否是 nginx 做反向代理这里的限制,也检查过了没问题。

又仔细观察了一下 , $_POST 过来的数据是空的, 难道是 POST 大小的问题?  检查了php.ini, 还真的有一个配置项:

 代码如下 复制代码

upload_max_filesize = 8M

改为 200M, 重启一下 php, OK!! 搞定!!  还真的是 POST过来的数据大小超过限制了!

下现附给没有服务器操作权限的朋友

在PHP上传上加入下面的代码,即可暂时让PHP能上传大文件,如下

 代码如下 复制代码

<?php 
//HTTP上传文件的开关,默认为ON即是开 
ini_set('file_uploads','ON');
//通过POST、GET以及PUT方式接收数据时间进行限制为90秒 默认值:60 
ini_set('max_input_time','90');
//脚本执行时间就由默认的30秒变为180秒 
ini_set('max_execution_time', '180');
//Post变量由2M修改为8M,此值改为比upload_max_filesize要大 
ini_set('post_max_size', '12M');
//上传文件修改也为8M,和上面这个有点关系,大小不等的关系。
ini_set('upload_max_filesize','10M'); 
//正在运行的脚本大量使用系统可用内存,上传图片给多点,最好比post_max_size大1.5倍 
ini_set('memory_limit','20M');
?> 

有此主机商是把ini_set函数禁止使用了,我们可以使用下面函数来检测

 代码如下 复制代码

<?php 
echo ini_get('file_uploads')."n";  
echo ini_get('max_input_time')."n";  
echo ini_get('max_execution_time')."n";  
echo ini_get('post_max_size')."n";  
echo ini_get('upload_max_filesize')."n";  
echo ini_get('memory_limit')."n";  
?>

今天忽然发现安装的主机控制面板报这个错误,但是功能还是可以正常使用。网上找了下有两种解决方法,希望下面的方法来给大家带来帮助哦。

看到错误提示如下

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 46

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 47

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 47

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 48

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 49

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 51

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 56

Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 56

解决办法如下:


方法1:

把php.ini的display_errors = on改成display_errors = off // (不显示错误)
就不显示了。
但是这种方法不是太好,只是不显示错误,其实错误还是存在的。

方法2:

1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On

顺便解释下allow_call_time_pass_reference这个参数的含义:
是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。

在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。

[!--infotagslink--]

相关文章

  • phpems SQL注入(cookies)分析研究

    PHPEMS(PHP Exam Management System)在线模拟考试系统基于PHP+Mysql开发,主要用于搭建模拟考试平台,支持多种题型和展现方式,是国内首款支持题冒题和自动评分与教师评分相...2016-11-25
  • Linux下PHP安装curl扩展支持https例子

    安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
  • JS使用cookie实现DIV提示框只显示一次的方法

    本文实例讲述了JS使用cookie实现DIV提示框只显示一次的方法。分享给大家供大家参考,具体如下:这里运用JavaScript的cookie技术,控制网页上的提示DIV只显示一次,也就是当用户是第一次打开网页的时候才显示,第二次自动隐藏起...2015-11-08
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • vue项目中js-cookie的使用存储token操作

    这篇文章主要介绍了vue项目中js-cookie的使用存储token操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-14
  • php使用floor去掉小数点的例子

    floor会产生小数了如果我们不希望有小数我们是可以去除小数点的了,下面一聚教程小编来为各位介绍php使用floor去掉小数点的例子,希望对各位有帮助。 float floor (...2016-11-25
  • 什么是cookie?js手动创建和存储cookie

    什么是cookie? cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。 有关cookie的例子: 名字 cookie 当访...2014-05-31
  • python爬虫用request库处理cookie的实例讲解

    在本篇内容里小编给大家整理的是一篇关于python爬虫用request库处理cookie的实例讲解内容,有需要的朋友们可以学习参考下。...2021-02-21
  • 基于C#后台调用跨域MVC服务及带Cookie验证的实现

    本篇文章介绍了,基于C#后台调用跨域MVC服务及带Cookie验证的实现。需要的朋友参考下...2020-06-25
  • 纯Css实现下拉菜单的简单例子

    下面我们来看一篇关于纯Css实现下拉菜单的简单例子,希望这篇文章能够给各位同学带来帮助,具体步骤如下. 大家可能会经常用到hover这属性,用hover实现鼠标经过的颜...2017-01-22
  • 详解Document.Cookie

    这篇文章主要介绍了详解Document.Cookie的相关资料,需要的朋友可以参考下...2015-12-27
  • jQuery使用cookie与json简单实现购物车功能

    这篇文章主要介绍了jQuery使用cookie与json简单实现购物车功能的方法,介绍了jQuery实现购物车的步骤与关键代码,需要的朋友可以参考下...2016-04-18
  • php时间日期对比与日期加减例子

    在php中日期对比用得比较多了,还有一个日期加减也用到不少,下面我拿两个例子来给大家介绍在php中日期操作方法吧,希望文章能给你带来帮助 功能需求 文章发布时段操...2016-11-25
  • php更新修改excel中的内容例子

    本例子不是读取Excel或生成新的Excel,而是读取现有的Excel文件,然后修改Excel中的数据,就像修改mysql中数据一样的哦。 代码如下 ...2016-11-25
  • Python Selenium操作Cookie的实例方法

    在本篇文章里小编给大家整理的是一篇关于Python Selenium操作Cookie的实例方法,有需要的朋友们可以学习参考下。...2021-02-28
  • js操作cookie保存浏览记录的方法

    这篇文章主要介绍了js操作cookie保存浏览记录的方法,涉及JavaScript使用cookie记录并保存用户浏览网页信息的实现技巧,需要的朋友可以参考下...2015-12-27
  • 原生js配合cookie制作保存路径的拖拽

    这篇文章主要介绍了原生js配合cookie制作保存路径的拖拽效果,感兴趣的小伙伴们可以参考一下...2016-01-02
  • Jquery cookie插件实现原理代码解析

    这篇文章主要介绍了Jquery cookie插件实现原理代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-04
  • chrome监听cookie变化与赋值问题

    这篇文章主要介绍了chrome监听cookie变化与赋值问题,cookie监听与赋值操作需要manifest文件里声明权限问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-10-22