unset $ _SESSION不工作 [英] unset $_SESSION not working
问题描述
我做了一个与Facebook连接并注册用户的代码,然后使用户登录,一切都很好。当他们登录时,我设置
$ _ SESSION ['id']
我的猜测是,如果这是没有设置的用户将从我的网站注销,它不会自动关联..
因为以前它就像一个循环,每次我注销,它登录再次使用Facebook连接即使用户再次使用Facebook登录...
编辑:我更改条件,知道不是循环我可以注销该站点..
但是,会话,不是没有设置!为什么,只是cookies设置为''但是=(会话未取消设置
这是我的代码
头
<?php
//
//使用PHP SDK从https://github.com/facebook/php-sdk下载
include( facebook-php-sdk-master / src / facebook.php);
//
//从Facebook应用页面
define('YOUR_APP_ID','');
define('YOUR_APP_SECRET','');
//
//新的Facebook对象与Facebook交互
$ facebook = new Facebook(array(
'appId'=> YOUR_APP_ID,
'secret'=> YOUR_APP_SECRET,
));
//
//如果用户在Facebook上登录,并且已经向您的应用程序授予了
//的权限,则获取他的数据:
$ userId = $ facebook-> getUser ();
?>
身体
code><?php
echo $ _SESSION ['id'];
if($ userId){
//
//已记录?显示一些数据
$ userInfo = $ facebook-> api('/'+ $ userId);
if(isset($ userInfo ['email'])|| isset($ _ SESSION ['id'])
{includefacebookregister.php; } else {echono hay permisos de facebook; }
} else {
//
//使用javaascript api打开对话框并执行
//通过插入fb:login-button来执行facebook连接过程
?>
< div id =fb-root>< / div>
< fb:login-button scope ='email,user_birthday'>< / fb:login-button>
<?php
}
?>
< script>
window.fbAsyncInit = function(){
FB.init({
appId:<?= YOUR_APP_ID?>
status:true,
cookie: true,
xfbml:true,
oauth:true,
});
FB.Event.subscribe('auth.login',function(response){
// --------------- ---------------------------------------
//这是回调if一切都可以
window.location.reload();
});
};
(function(d){
var js,id ='facebook-jssdk'; if(d.getElementById(id)){return;}
js = d。 createElement('script'); js.id = id; js.async = true;
js.src =//connect.facebook.net/en_US/all.js;
d.getElementsByTagName ('head')[0] .appendChild(js);
}(document));
< / script>
facebookregister.php
<?PHP
echo< p>您是:< strong>。 $ userInfo ['name']。< / strong>< br />;
echo你的出生日期是:$ userInfo ['birthday']。< / p>;
echo你的邮件是:$ userInfo ['email']。< / p>;
echo您的邮件是:$ userInfo ['username']。< / p>;
// $ name = $ userInfo ['name'];
$ first_name = $ userInfo ['first_name'];
$ last_name = $ userInfo ['last_name'];
$ birthday = $ userInfo ['birthday'];
$ username_fb = $ userInfo ['username'];
$ email = $ userInfo ['email'];
$ gender = $ userInfo ['gender'];
$ status = 1;
函数generateRandomString($ length = 10){
$ characters ='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!';
$ randomString =''; ($ i = 0; $ i <$ length; $ i ++){
$ randomString。= $ characters [rand(0,strlen($ characters) - 1)];
}
return $ randomString;
}
$ db = DAL :: get_instance();
//从我们的用户表中选择电子邮件匹配的所有行
$ count = $ db-> read_single_column(select count(id)from .TABLE_PREFIX。users where email =?and status = 1,array($ email));
echoAqui$ count;
//如果匹配数量为1
if($ count == 1){
//提供的电子邮件地址只是登录用户
$ res = $ db-> execute_query(select * from.TABLE_PREFIX。users where email =?,array($ email));
$ v = $ res-> fetch_assoc();
$ username = $ v ['username'];
$ password = $ v ['password'];
$ this-> set_variable('username',$ username);
$ this-> set_variable('password',$ password);
$ query =select id from.TABLE_PREFIX。users where username =?and password =?
$ res = $ db-> execute_query($ query,array($ username,$ password));
$ value2 = $ res-> fetch_assoc();
$ id = $ value2 ['id'];
$ orig_password = $ db-> read_single_column(select password from.TABLE_PREFIX。users where username =?and status = 1,array($ username));
if($ password == $ orig_password)
{
$ t = time();
$ sql =update.TABLE_PREFIX。users set last_login_time =?where id =?;
$ res = $ db-> execute_query($ sql,array($ t,$ id));
$ srv_nms = BASE;
$ srv_nms = str_replace(http://,,$ srv_nms);
$ srv_nms = str_replace(https://,,$ srv_nms);
$ srv_nms = str_replace(www。,,$ srv_nms);
$ srv_pats = $ srv_nms;
$ srv_nms_arr = explode(/,$ srv_nms);
$ srv_nms = $ srv_nms_arr [0];
$ srv_pats = str_replace($ srv_nms。/,,$ srv_pats);
setcookie(COOKIE_LOGINID,$ id,0,/。$ srv_pats,$ srv_nms);
setcookie(COOKIE_USERNAME,$ username,0,/。$ srv_pats,$ srv_nms);
setcookie(COOKIE_PASSWORD,$ orig_password,0,/。$ srv_pats,$ srv_nms);
$ _SESSION ['user'] = $ email;
$ _SESSION ['id'] = $ id;
if(LoginHelper :: validate_user_login()== 0)
{
header(Location:index.php);
退出;
}
}
} else {
//最后,否则注册帐户
//注册时间(unix)
$ registerTime = date('U');
//为我们的激活密钥
$ code = md5($ username)$ registerTime;
$ password = $ randomString;
$ password = md5($ password);
//将行插入数据库
$ res = $ db-> execute_query(INSERT INTO.TABLE_PREFIX。用户(`username`,`password`,`email `,`reg_time`,`status`,`fname`,`lname`)VALUES('$ username_fb,$密码','$ email。','。 $ registerTime。','。$ status。','。$ first_name。','。$ last_name。'));
$ row = $ db-> execute_query(SELECT username,password FROM.TABLE_PREFIX。users WHERE email =。$ email。);
$ row_data = $ row-> fetch_assoc();
$ username = $ row_data ['username'];
$ password = $ row_data ['password'];
$ this-> set_variable('username',$ username);
$ this-> set_variable('password',$ password);
$ query =select id from.TABLE_PREFIX。users where username =?and password =?
$ res = $ db-> execute_query($ query,array($ username,$ password));
$ value2 = $ res-> fetch_assoc();
$ id = $ value2 ['id'];
$ orig_password = $ db-> read_single_column(select password from.TABLE_PREFIX。users where username =?and status = 1,array($ username));
if(md5($ password)== $ orig_password)
{
$ t = time();
$ sql =update.TABLE_PREFIX。users set last_login_time =?where id =?;
$ res = $ db-> execute_query($ sql,array($ t,$ id));
$ srv_nms = BASE;
$ srv_nms = str_replace(http://,,$ srv_nms);
$ srv_nms = str_replace(https://,,$ srv_nms);
$ srv_nms = str_replace(www。,,$ srv_nms);
$ srv_pats = $ srv_nms;
$ srv_nms_arr = explode(/,$ srv_nms);
$ srv_nms = $ srv_nms_arr [0];
$ srv_pats = str_replace($ srv_nms。/,,$ srv_pats);
setcookie(COOKIE_LOGINID,$ id,0,/。$ srv_pats,$ srv_nms);
setcookie(COOKIE_USERNAME,$ username,0,/。$ srv_pats,$ srv_nms);
setcookie(COOKIE_PASSWORD,$ orig_password,0,/。$ srv_pats,$ srv_nms);
$ _SESSION ['user'] = $ email;
$ _SESSION ['id'] = $ id;
//header(\"Location:\".$this->make_url('user/home'));
// exit;
}
//发送包含激活链接的电子邮件到提供的电子邮件地址
mail($ email,$ username。 注册确认,感谢您注册给我们$用户名。,\\\
\\\
Here是您的激活链接,如果链接不起作用,并将其粘贴到浏览器地址栏中。 \\\
http://www.yourwebsitehere.co.uk/activate.php?code =。$ code,'From:noreply@youwebsitehere.co.uk');
//显示成功消息
echo< center>您已成功注册,请访问您的收件箱以激活您的帐户!< / center>;
header(Location:index.php);
退出;
}
?>
最重要的是。退出操作
function logout_action()
{
$ srv_nms = BASE;
$ srv_nms = str_replace(http://,,$ srv_nms);
$ srv_nms = str_replace(https://,,$ srv_nms);
$ srv_nms = str_replace(www。,,$ srv_nms);
$ srv_pats = $ srv_nms;
$ srv_nms_arr = explode(/,$ srv_nms);
$ srv_nms = $ srv_nms_arr [0];
$ srv_pats = str_replace($ srv_nms。/,,$ srv_pats);
setcookie(COOKIE_LOGINID,,0,/$ srv_pats,$ srv_nms);
setcookie(COOKIE_USERNAME,,0,/。$ srv_pats,$ srv_nms);
setcookie(COOKIE_PASSWORD,,0,/$ srv_pats,$ srv_nms);
unset($ _ SESSION ['user']);
unset($ _ SESSION ['id']);
unset($ _ SESSION ['fb_540341239342331_code']);
unset($ _ SESSION ['fb_540341239342331_access_token']);
unset($ _ SESSION ['fb_540341239342331_user_id']);
header(Location:。$ this-> make_url(user / login / l));
死
}
会话未设置&破坏,测试但不工作..为什么?
代码
function logout_action()
{
$ srv_nms = BASE ;
$ srv_nms = str_replace(http://,,$ srv_nms);
$ srv_nms = str_replace(https://,,$ srv_nms);
$ srv_nms = str_replace(www。,,$ srv_nms);
$ srv_pats = $ srv_nms;
$ srv_nms_arr = explode(/,$ srv_nms);
$ srv_nms = $ srv_nms_arr [0];
$ srv_pats = str_replace($ srv_nms。/,,$ srv_pats);
setcookie(COOKIE_LOGINID,,0,/$ srv_pats,$ srv_nms);
setcookie(COOKIE_USERNAME,,0,/。$ srv_pats,$ srv_nms);
setcookie(COOKIE_PASSWORD,,0,/$ srv_pats,$ srv_nms);
session_unset();
header(Location:。$ this-> make_url(user / login / l));
死
}
不建议取消设置会话变量这样。使用 session_unset()
,请参见 http://php.net/manual/en/function.session-unset.php
那么,你不希望会话仍然存在于用户计算机上,为此使用 session_destroy()
。
session_unset()
只是清除会话以供使用。
Hi i made a code that connects with facebook and register the user, then it makes the user login , everything works very nice.. When they login i set
$_SESSION['id']
My guess was, if this was unset the user will be logout from my site, and it wont be "autoreconnected"..
Because previously it was like a loop, everytime i logout, it login again using the facebook connect even if the user havent clic again "login with facebook"...
EDIT: I change a condition and know is not "looping" i CAN logout of the site..
But the Session , is not unset!, why, just the cookies are set to '' but ,=( session is not unset
Here is my code
the head
<?php
//
// uses the PHP SDK. Download from https://github.com/facebook/php-sdk
include("facebook-php-sdk-master/src/facebook.php");
//
// from the facebook app page
define('YOUR_APP_ID', '');
define('YOUR_APP_SECRET', '');
//
// new facebook object to interact with facebook
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
//
// if user is logged in on facebook and already gave permissions
// to your app, get his data:
$userId = $facebook->getUser();
?>
The body
<?php
echo $_SESSION['id'];
if ($userId) {
//
// already logged? show some data
$userInfo = $facebook->api('/' + $userId);
if (isset($userInfo['email']) || isset($_SESSION['id']))
{ include "facebookregister.php"; } else { echo "no hay permisos de facebook"; }
} else {
//
// use javaascript api to open dialogue and perform
// the facebook connect process by inserting the fb:login-button
?>
<div id="fb-root"></div>
<fb:login-button scope='email,user_birthday'></fb:login-button>
<?php
}
?>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : <?=YOUR_APP_ID?>,
status : true,
cookie : true,
xfbml : true,
oauth : true,
});
FB.Event.subscribe('auth.login', function(response) {
// ------------------------------------------------------
// This is the callback if everything is ok
window.location.reload();
});
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
facebookregister.php
<?PHP
echo "<p>YOU ARE: <strong>". $userInfo['name'] ."</strong><br/>";
echo "Your birth date is: ".$userInfo['birthday']."</p>";
echo "Your mail is: ".$userInfo['email']."</p>";
echo "Your mail is: ".$userInfo['username']."</p>";
//$name = $userInfo['name'];
$first_name = $userInfo['first_name'];
$last_name = $userInfo['last_name'];
$birthday = $userInfo['birthday'];
$username_fb = $userInfo['username'];
$email = $userInfo['email'];
$gender = $userInfo['gender'];
$status = 1;
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
$db= DAL::get_instance();
//select all rows from our users table where the emails match
$count=$db->read_single_column("select count(id) from ".TABLE_PREFIX."users where email=? and status=1", array($email));
echo "Aqui".$count;
//if the number of matchs is 1
if($count == 1){
//the email address supplied is taken so just login user
$res=$db->execute_query("select * from ".TABLE_PREFIX."users where email=?",array($email));
$v=$res->fetch_assoc();
$username=$v['username'];
$password=$v['password'];
$this->set_variable('username',$username);
$this->set_variable('password',$password);
$query="select id from ".TABLE_PREFIX."users where username=? and password=?";
$res=$db->execute_query($query,array($username,$password));
$value2=$res->fetch_assoc();
$id=$value2['id'];
$orig_password=$db->read_single_column("select password from ".TABLE_PREFIX."users where username=? and status=1", array($username));
if($password == $orig_password)
{
$t=time();
$sql="update ".TABLE_PREFIX."users set last_login_time=? where id=?";
$res=$db->execute_query($sql,array($t,$id));
$srv_nms=BASE;
$srv_nms=str_replace("http://","",$srv_nms);
$srv_nms=str_replace("https://","",$srv_nms);
$srv_nms=str_replace("www.","",$srv_nms);
$srv_pats=$srv_nms;
$srv_nms_arr=explode("/",$srv_nms);
$srv_nms=$srv_nms_arr[0];
$srv_pats=str_replace($srv_nms."/","",$srv_pats);
setcookie(COOKIE_LOGINID,$id,0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_USERNAME,$username,0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_PASSWORD,$orig_password,0,"/".$srv_pats,$srv_nms);
$_SESSION['user'] = $email;
$_SESSION['id'] = $id;
if(LoginHelper::validate_user_login()==0)
{
header("Location:index.php");
exit;
}
}
}else{
//finally, otherwise register there account
//time of register (unix)
$registerTime = date('U');
//make a code for our activation key
$code = md5($username).$registerTime;
$password = $randomString;
$password = md5($password);
//insert the row into the database
$res=$db->execute_query("INSERT INTO ".TABLE_PREFIX."users (`username`, `password`, `email`, `reg_time`, `status`, `fname`, `lname`) VALUES('".$username_fb."','".$password."','".$email."','".$registerTime."','".$status."','".$first_name."' ,'".$last_name."' )");
$row=$db->execute_query("SELECT username, password FROM ".TABLE_PREFIX."users WHERE email=".$email."");
$row_data=$row->fetch_assoc();
$username=$row_data['username'];
$password=$row_data['password'];
$this->set_variable('username',$username);
$this->set_variable('password',$password);
$query="select id from ".TABLE_PREFIX."users where username=? and password=?";
$res=$db->execute_query($query,array($username,$password));
$value2=$res->fetch_assoc();
$id=$value2['id'];
$orig_password=$db->read_single_column("select password from ".TABLE_PREFIX."users where username=? and status=1", array($username));
if(md5($password)== $orig_password)
{
$t=time();
$sql="update ".TABLE_PREFIX."users set last_login_time=? where id=?";
$res=$db->execute_query($sql,array($t,$id));
$srv_nms=BASE;
$srv_nms=str_replace("http://","",$srv_nms);
$srv_nms=str_replace("https://","",$srv_nms);
$srv_nms=str_replace("www.","",$srv_nms);
$srv_pats=$srv_nms;
$srv_nms_arr=explode("/",$srv_nms);
$srv_nms=$srv_nms_arr[0];
$srv_pats=str_replace($srv_nms."/","",$srv_pats);
setcookie(COOKIE_LOGINID,$id,0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_USERNAME,$username,0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_PASSWORD,$orig_password,0,"/".$srv_pats,$srv_nms);
$_SESSION['user'] = $email;
$_SESSION['id'] = $id;
//header("Location:".$this->make_url('user/home'));
//exit;
}
//send the email with an email containing the activation link to the supplied email address
mail($email, $username.' registration confirmation', "Thank you for registering to us ".$username.",\n\nHere is your activation link. If the link doesn't work copy and paste it into your browser address bar.\n\nhttp://www.yourwebsitehere.co.uk/activate.php?code=".$code, 'From: noreply@youwebsitehere.co.uk');
//display the success message
echo "<center>You have successfully registered, please visit you inbox to activate your account!</center>";
header("Location: index.php");
exit;
}
?>
THE MOST IMPORTANT. LOGOUT ACTION
function logout_action()
{
$srv_nms=BASE;
$srv_nms=str_replace("http://","",$srv_nms);
$srv_nms=str_replace("https://","",$srv_nms);
$srv_nms=str_replace("www.","",$srv_nms);
$srv_pats=$srv_nms;
$srv_nms_arr=explode("/",$srv_nms);
$srv_nms=$srv_nms_arr[0];
$srv_pats=str_replace($srv_nms."/","",$srv_pats);
setcookie(COOKIE_LOGINID,"",0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_USERNAME,"",0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_PASSWORD,"",0,"/".$srv_pats,$srv_nms);
unset($_SESSION['user']);
unset($_SESSION['id']);
unset($_SESSION['fb_540341239342331_code']);
unset($_SESSION['fb_540341239342331_access_token']);
unset($_SESSION['fb_540341239342331_user_id']);
header("Location: ".$this->make_url("user/login/l"));
die;
}
Session unset & destroy, tested but not working.. why?? Code
function logout_action()
{
$srv_nms=BASE;
$srv_nms=str_replace("http://","",$srv_nms);
$srv_nms=str_replace("https://","",$srv_nms);
$srv_nms=str_replace("www.","",$srv_nms);
$srv_pats=$srv_nms;
$srv_nms_arr=explode("/",$srv_nms);
$srv_nms=$srv_nms_arr[0];
$srv_pats=str_replace($srv_nms."/","",$srv_pats);
setcookie(COOKIE_LOGINID,"",0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_USERNAME,"",0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_PASSWORD,"",0,"/".$srv_pats,$srv_nms);
session_unset();
header("Location: ".$this->make_url("user/login/l"));
die;
}
It's not recommended to unset session variables this way. Use session_unset()
, see http://php.net/manual/en/function.session-unset.php
Over that, you don't want that the session still exists on the users computer, for this use session_destroy()
.
session_unset()
just clears out the session for usage.
这篇关于unset $ _SESSION不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!