我想设计一个使用Facebook帐户登录网站的模型。我按照本教程Login with Facebook using JavaScript SDK
进行了操作使用此功能,我可以从facebook获取用户信息,通过ajax调用显示这些信息并将其存储在数据库中。 现在,当我试图将电子邮件存储在会话变量中时,它不存储。
这是我的代码:
的login.php
<?php
session_start();
include("utility.php");
?>
<html>
<body>
<div id="status"></div>
<!-- Facebook login or logout button -->
<a href="javascript:void(0);" onclick="fbLogin()" id="fbLink"><img src="fblogin.png"/></a>
<!-- Display user profile data -->
<div id="userData"></div>
<!-- Display session variable value -->
<div id="display">
<?php
if(isset($_SESSION['Memberemail'])){
echo $_SESSION['Memberemail'];
} ?>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type="text/javascript" src="assets/js/fblogin.js" ></script>
</body
</html>
fblogin.js:
window.fbAsyncInit = function() {
// FB JavaScript SDK configuration and setup
FB.init({
appId : 'IsertYourFacebookAppId', // FB App ID
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse social plugins on this page
version : 'v2.8' // use graph api version 2.8
});
// Check whether the user already logged in
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
//display user data
getFbUserData();
}
});
};
// Load the JavaScript SDK asynchronously
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
// Facebook login with JavaScript SDK
function fbLogin() {
FB.login(function (response) {
if (response.authResponse) {
// Get and display the user profile data
getFbUserData();
} else {
document.getElementById('status').innerHTML = 'User cancelled login or did not fully authorize.';
}
}, {scope: 'email'});
}
// Fetch the user profile data from facebook
function getFbUserData(){
FB.api('/me', {locale: 'en_US', fields: 'id,first_name,last_name,email,link,gender,locale,picture'},
function (response) {
document.getElementById('fbLink').setAttribute("onclick","fbLogout()");
document.getElementById('fbLink').innerHTML = 'Logout from Facebook';
document.getElementById('status').innerHTML = 'Thanks for logging in, ' + response.first_name + '!';
document.getElementById('userData').innerHTML = '<p><b>FB ID:</b> '+response.id+'</p><p><b>Name:</b> '+response.first_name+' '+response.last_name+'</p><p><b>Email:</b> '+response.email+'</p><p><b>Gender:</b> '+response.gender+'</p><p><b>Locale:</b> '+response.locale+'</p><p><b>Picture:</b> <img src="'+response.picture.data.url+'"/></p><p><b>FB Profile:</b> <a target="_blank" href="'+response.link+'">click to view profile</a></p>';
// Save user data
saveUserData(response);
});
}
// Save user data to the database
function saveUserData(userData){
$.post('userData.php', {oauth_provider:'facebook',userData: JSON.stringify(userData)}, function(data){ return true; });
}
// Logout from facebook
function fbLogout() {
FB.logout(function() {
document.getElementById('fbLink').setAttribute("onclick","fbLogin()");
document.getElementById('fbLink').innerHTML = '<img src="fblogin.png"/>';
document.getElementById('userData').innerHTML = '';
document.getElementById('status').innerHTML = 'You have successfully logout from Facebook.';
});
}
userData.php:
<?php
session_start();
include("utility.php");
//Convert JSON data into PHP variable
$userData = json_decode($_POST['userData']);
if(!empty($userData)){
$_SESSION['Memberemail']=$userData->email;
$oauth_provider = $_POST['oauth_provider'];
//Check whether user data already exists in database
$prevQuery = "SELECT * FROM member_info WHERE oauth_provider = '".$oauth_provider."' AND oauth_uid = '".$userData->id."'";
$prevResult = mysqli_query($conn,$prevQuery);
$num_rows = mysqli_num_rows($prevResult);
if($num_rows > 0){
//Update user data if already exists
$query = "UPDATE users SET first_name = '".$userData->first_name."', last_name = '".$userData->last_name."', email = '".$userData->email."', gender = '".$userData->gender."', locale = '".$userData->locale."', picture = '".$userData->picture->data->url."', link = '".$userData->link."', modified = '".date("Y-m-d H:i:s")."' WHERE oauth_provider = '".$oauth_provider."' AND oauth_uid = '".$userData->id."'";
$update = $db->query($query);
}else{
//Insert user data
$email = $userData->email;
$query = "INSERT INTO member_info SET oauth_provider = '".$oauth_provider."', oauth_uid = '".$userData->id."', MemberFirstName = '".$userData->first_name."', MemberLastName = '".$userData->last_name."',
MemberEmail = '".$email."'";
$insert = mysqli_query($conn,$query);
// $_SESSION['Memberemail']=$userData->email;
}
}
在userData.php中,我想在$ _SESSION [&#39; Memberemail&#39;]变量中存储电子邮件。但我不能存储在会话变量中。知道如何在会话中存储?