php获取session的值
① php 取不出session值,是空的
你这里已经保存成功session了,打印也没问题 你这个是想输出session吧: echo"获取session<br/>"; 输出的话需要拼接 你这样不行 echo "获取".$_SESSION['name']."<br/>";这样就能输出你保存的session了
② php中怎么取得session里面的值
1、在php中include和require内的内容是否运行,要看你在所包含的文件里面的代码。如果你包含的是函数,那么当然要等到你调用才会运行,如果你包含的是语句,那么相当于是把这段语句加入到当前的位置2、include和require的区别是,一个会出现应用级别的报警,include文件不存在,不会引起报错(但是有报警),而require会引起报错,你试一下引用不存在的文件就知道了3、增加once,那么就是说只包含一次,如果该文件已经被包含了,那么就不会再次包含,你可以设计一个包含文件,直接让其echo数据,然后运行看看,比如<?phpecho $f?>这是一个文件然后你再另外一个页面使用:<?php$f=1include ("xxx.php")$f=2include ("xxx.php")?>来看自己动动手也可以去后盾人学习,看看教学视频就学会了,没毛病
③ php怎么获取session的值
原生的php获取session,必须开启session_start();如下
<?php
session_start();
print_r($_SESSION);
?>
当然在php框架中都有自己的获取方式,有的甚至不用php原生的session,比如laravel框架
④ 关于PHP中SESSION取值的问题
在PHP中使用过SESSION的朋友可能会碰到这么一个问题,SESSION变量不能跨页传递。这令我苦恼了好些日子,最终通过查资料思考并解决了这个问题。我认为,出现这个问题的原因有以下几点:
1、客户端禁用了cookie
2、浏览器出现问题,暂时无法存取cookie
3、php.ini中的session.use_trans_sid = 0或者编译时没有打开--enable-trans-sid选项
为什么会这样呢?下面我解释一下:
Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。
PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是:session不一定必须依赖cookie,这也是session相比cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的,即“php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”。
明白了以上的道理,现在我们来抛开cookie使用session,主要途径有三条:
1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id。
2、手动通过URL传值、隐藏表单传递session id。
3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。
通过例子来说明吧:
s1.php
<?php
session_start();
$_SESSION['var1']="中华人民共和国";
$url="<ahref=".""s2.php">下一页</a>";
echo$url;
?>
s2.php
<?php
session_start();
echo"传递的session变量var1的值为:".$_SESSION['var1'];
?>
运行以上代码,在客户端cookie正常的情况下,应该可以在得到结果“中华人民共和国”。
现在你手动关闭客户端的cookie,再运行,可能得不到结果了吧。如果得不到结果,再“设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”,又得到结果“中华人民共和国”
这也就是上面所说的途径1。
下面再说途径2:
修改的代码如下:
s1.php
<?php
session_start();
$_SESSION['var1']="中华人民共和国";
$sn=session_id();
$url="<ahref=".""s2.php?s=".$sn."">下一页</a>";
echo$url;
?>
s2.php
<?php
session_id($_GET['s']);
session_start();
echo"传递的session变量var1的值为:".$_SESSION['var1'];
?>
办法3还是通过例子来说明:
login.html
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>Login</title>
<metahttp-equiv="Content-Type"content="text/html;charset=??????">
</head>
<body>
请登录:
<formname="login"method="post"action="mylogin1.php">
用户名:<inputtype="text"name="name"><br>
口令:<inputtype="password"name="pass"><br>
<inputtype="submit"value="登录">
</form>
</body>
</html>
mylogin1.php
<?php
$name=$_POST['name'];
$pass=$_POST['pass'];
if(!$name||!$pass){
echo"用户名或密码为空,请<ahref="login.html">重新登录</a>";
die();
}
if(!($name=="laogong"&&$pass=="123")){
echo"用户名或密码不正确,请<ahref="login.html">重新登录</a>";
die();
}
//注册用户
ob_start();
session_start();
$_SESSION['user']=$name;
$psid=session_id();
$fp=fopen("e:\tmp\phpsid.txt","w+");
fwrite($fp,$psid);
fclose($fp);
//身份验证成功,进行相关操作
echo"已登录<br>";
echo"<ahref="mylogin2.php">下一页</a>";
?>
mylogin2.php
<?php
$fp=fopen("e:\tmp\phpsid.txt","r");
$sid=fread($fp,1024);
fclose($fp);
session_id($sid);
session_start();
if(isset($_SESSION['user'])&&$_SESSION['user']="laogong"){
echo"已登录!";
}
else{
//成功登录进行相关操作
echo"未登录,无权访问";
echo"请<ahref="login.html">登录</a>后浏览";
die();
}
?>
同样请关闭cookie测试,用户名:laogong 密码:123 这是通过文件保存session id的,文件是:e: mpphpsid.txt,请根据自己的系统决定文件名或路径。
至于用数据库的方法,我就不举例子了,与文件的方法类似。
总结一下,上面的方法有一个共同点,就是在前一页取得session id,然后想办法传到下一页,在下一页的session_start();代码之前加代码session_id(传过来的session id);
⑤ 请问一下php的session如何用如何接收前一个页面表单传过来的值并保存在session中
session 可以直接使用,在开头先运行session_start(),在程序中他是一个超变量,每次请求都可以调用。直接$_SESSION[“name”] = $value来使用,获取变量值直接使用$_SESSION[“name”],表单传递不需要用session,直接获取$_POST[“name”],传过来的值想保存到session,$_SESSION[“name”] = $_POST[“name”];就可以了,如有更多疑问请回复。
⑥ PHP中COOKIE或SESSION值在不同页面取值不了
在一个页面设置一个cookie时,必须刷新或到下一个页面才可以用 $_COOKIE 得到变量的值.原因是因为当页面第一次被浏览器访问载入时,页面中的 cookie 会被设置,将其发送存储到客户端指定的存储位置,所以$_COOKIE没有接收到客户端发送过来的 cookie 变量的值,当刷新或到下一个页面时,客户端会在页面程序在服务器端运行之前,发送与该地址相对应的 cookie到服务器端,所以 $_COOKIE 可以得到的值!
说白了就是当每一个页面被访问时,如果客户端找到了与访问地址相对应的 cookie 时,会在程序在服务器端运行之前发送这个 cookie 到服务器端. (个人对此的看法)本人表达能力不强,如有不明,还请抱歉!php中设置cookie数组的时候,不可以用像php中的那个添加数据的方法:
<?php
setcookie('my_cookie[]', 1);
setcookie('my_cookie[]', 2);
print_r($_COOKIE); // Array ( [my_cookie] => Array ( [0] => 1 ))
// 数组的值添加是添加成功了,不过索引没有变,后面的数据将前的数据覆盖了!由此得到
my_cookie[],默认指向数据的第一元素的位置,即索引为0 的位置. 注意与php中的不一样! 以后用cookie数据记住要指定数组元素索引哦!
$my_cookie[] = 1;
$my_cookie[] = 2;
print_r($my_cookie); //Array ( [0] => 1 [1] => 2)
?>删除 cookie 变量的两个方法:
1.php
<?php
setcookie('user_name_1', 'zhaofei299', time()+3600); // 生存期为 1 个小时
setcookie('user_name_2', 'ZHAOFEI299', time()+3600); // 生存期为 1 个小时
?>2.php
<?php
setcookie('user_name_1'); // 第一种
setcookie('user_name_2', "", time()-1); // 第二种
print_r($_COOKIE); // 刷新页面2下以上会输出 Array ( [user_name_1] => )/*为什么超级全局变量 $_COOKIE 中的 user_name_1 没有被删除(变量为空并不代表不存在),而user_name_2被删除了? 那是因为两个删除变量的方式不同!
第一种: 是设置了 cookie 的生存期, 只不过是将它的值默认设置为空,生存期为与浏览器一样,浏览器关闭时,cookie才会删除!所以当重新打开一个浏览器,输出地址时,才会发现 cookie 变量全部被删除了!将2.php 中两个 setcookie() 函数部分注释掉看看(重新输出了地址)!第二种: 也是设置了 cookie 的生存期,是使 cookie 的生存期一定过期, cookie 也就被删除,所以刷新页面,客户端向服务器端发送 cookie 时, $_COOKIE 并没有能够得到该cookie变量的值!
*/
?>会话id默认储放在客户端Cookie中!
<?php
session_start();
print_r($_COOKIE);
?>
cookie的设置有两种方法header('set-cookie:user=zhaofei299');
setcookie('user', 'zhaofei299');会话变量不能被GET数据或POST数据重载!使用session变量传递数组,对象时无需序列化!
使用session变量传递对象时,在调用session_start()之前,必须包含该对类对象的定义,反序列化(serialize)也是如此!
删除单个会话变量可以使用unset($_SESSION['***']) 直接删除!删除所有的会话变量不可以用unset($_SESSION),因为这样会将所有的会话信息删除,包含存储在COOKIE中的PHPSESSID,也就是破坏了两个页面之间的会话联系,应该使用$_SESSION = array();消除会话id,使页面之间失去联系!
session_destroy();
程序清单1.1
<?php
session_start();
header('content-type:text/html;charset=utf-8');
$_SESSION['a'] = 'a';
$_SESSION['b'] = 'b';unset($_SESSION); //测试后,再注释下看看
$_SESSION['user'] = 'zhaofei299';
echo 'SESSION_ID: '.session_id().'
';
echo '<a href="3.php" target="_blank">测试下</a>';
?>
<?php
session_start();echo $_SESSION['user'];
echo session_id(); //会话变量改变了
?>会话id(session_id)的两种方式传递:
1.cookie
2.url因为默认session是基于cookie的,而cookie又是跟随http协议发送的,所以与cookie一样,在session_start()之前不能有任何输出!现在主要说一说第二种,通过 url 传递会话id
php中已经定义SID这个常量来得到 会话的id
sesssin_id 的使用!
<?php
session_start();
echo defined('SID')?'true':'false'; // true
echo SID; //什么也没有?
?>
为什么SID的值会是null 呢?是它哪里有问题了?
原因是因为 session 默认是基于 cookie 的,而 SID 只有 session_id 通过 url
传递数据时才会被赋值!
在浏览器中将 cookie 禁用,你就会发现 SID 有了输出,而不是 null!
删除session要三步实现.
<?php
session_destroy(); // 第一步: 删除服务器端session文件,这使用
setcookie(session_name(),'',time()-3600); // 第二步: 删除实际的session:
$_SESSION = array(); // 第三步: 删除$_SESSION全局变量数组
?>大家都知道session变量是保存在服务器端的,也就是说session的变量会保存在服务器中一个目录中,我们可以在php.ini中的session.save_path 那里可以找到session文件中保存的地址.默认的session的生存期是浏览的关闭就结束,但要知道会话过期结束后,当打开页面session_start()会判断会话id 是否存在,如果不存在就创建一个,否则将该会话id 的变量载入页面!因为过期session_id会被创建一个新的,但它保存在服务器端的session文件并没有被删除(关闭浏览器,打开session文件保存地看看),所以要用session_destory()函数清除会话id,并同时清除相应的会话文件,这样的话才能做到最彻底的清除!
session_id 使用 url 传递session 变量数据时,因为session_start()开启会话时会判断会话id 是否存在,如果不存在就创建一个,否则将该会话id 的变量载入页面!
而现在是使用url 来传递session_id,然而每一次 刷新/进入页面 都会生成一个会话id,所以页面之间就不能得到在另一页面设置过的session_id 的变量,那么使用 session也就没什么意义了!解决方法:在session_start()之前,手动设置页面的session_id,这样页面的就可以得到前一页中所设置的session变量的,也就实现了会话的传递,如下代码可以说明!
//已禁用 cookie1.php
<?php
session_start();
$_SESSION['user'] = 'zhaofei299';
echo '<a href="2.php?'.SID.'">下一页</a>';
?>1.php的第4行代码也可以写成:echo '<a href="2.php">下一页</a>';可以设置php.ini 中的 session.use_trans_sid 为1,这样当使用 url 传递会话 id 时,
浏览器会自动将 session_id 追加到 url 的后面!
就好像 在浏览器中 输入: www.cn-juking.com 一样,浏览器会自动将其更换成 http://www.cn-juking.com/2.php
<?php
session_id($_GET['PHPSESSID']); // 手动设置session_id,这种就可以使用前一个页面的session_id 的变量了,也就实现了会话!
session_start();
print_r($_SESSION);
?>常用session函数:bool session_start(void); 初始化session
bool session_destroy(void): 删除服务器端session关联文件。
string session_id() 当前session的id
string session_name() 当前存取的session名称,也就是客户端保存session ID的cookie名称.默认PHPSESSID。
array session_get_cookie_params() 与这个session相关联的session的细节.
string session_cache_limiter() 控制使用session的页面的客户端缓存
ini session_cache_expire() 控制客户端缓存时间
bool session_destroy() 删除服务器端保存session信息的文件
void session_set_cookie_params ( int lifetime [, string path [, string domain [, boolsecure [, bool httponly]]]] )设置与这个session相关联的session的细节
bool session_set_save_handler ( callback open, callback close, callback read, callbackwrite, callback destroy, callback gc )定义处理session的函数,(不是使用默认的方式)
bool session_regenerate_id([bool delete_old_session]) 分配新的session id
⑦ php session是如何赋值如何查看的
php session赋值,就是通过在在php的页面中开启你的session,通过session_start();开启之后就可以像普通变量那样赋初值,$_SESSION['admin'] = 'admin',这样的赋值的,还有一种就是通过html的表单传值过来,$_SESSION['admin'] = $_POST['admin'],这样来赋值的,session我们一般都是用在验证是否已经登录使用,举个例子:
<?php
session_start();
if(!isset($_SESSION[$adminconf['admin']]) || $_SESSION[$adminconf['admin']] ==''){
header('Location:'.APP_MAIN.'/stie/admin_login.php'); //跳回到登录界面
exit();
}
?>