会话变量未在实时服务器中传递[关闭]
Posted
技术标签:
【中文标题】会话变量未在实时服务器中传递[关闭]【英文标题】:Session variable not passed in live server [closed] 【发布时间】:2016-04-05 08:27:26 【问题描述】:我已经在 php 中尝试了一些用于用户注册的代码,这整个代码在本地服务器上运行良好,但是当涉及到实时服务器时,每个 php 代码都会被执行,但会话变量不会显示,但在本地服务器会话变量被传递并且正确显示
DB_Function.php
public function storeUser($salutation, $fname, $lname, $dob, $mobile, $country, $state, $city, $pin)
try
//$hash = md5($password);
$characters = '0123456789';
$uuid = '';
$random_string_length = 5;
for ($i = 0; $i < $random_string_length; $i++)
$uuid .= $characters[rand(0, strlen($characters) - 1)];
$fullname = $fname . " " . $lname;
$vault_no = $salutation . "" . $country . "" . $pin . "" . $uuid;
$sql = "INSERT INTO users(salutation, fname, lname, fullname, dob, mobile, country, state, city, pin, unique_id, vault_no, created_at) VALUES ('$salutation', '$fname', '$lname', '$fullname', '$dob', '$mobile', '$country', '$state', '$city', '$pin', '$uuid', '$vault_no', NOW())";
$dbh = $this->db->prepare($sql);
/*execute the insert query in
get the user details return
*/
if($dbh->execute())
// get user details
$sql = "SELECT * FROM users WHERE mobile = '$mobile' LIMIT 1";
$dbh = $this->db->prepare($sql);
$result = $dbh->execute();
$rows = $dbh->fetch();
$n = count($rows);
if($n)
return $rows;
catch (Exception $e)
die('Error accessing database: ' . $e->getMessage());
return false;
fill.php
<?php
session_start();
?>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MiiSKy | Register</title>
<script type="text/javascript" src="jquery_source.js"></script>
<script type="text/javascript" src = "register.js"></script>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="font-awesome/css/font-awesome.css" rel="stylesheet">
<!--<link href="css/plugins/iCheck/custom.css" rel="stylesheet">-->
<link href="css/animate.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<!--<script src='https://www.google.com/recaptcha/api.js'></script>-->
<link href="css/plugins/iCheck/custom.css" rel="stylesheet">
<link href="css/plugins/datapicker/datepicker3.css" rel="stylesheet">
<!--Dropzone-->
<link href="css/plugins/dropzone/basic.css" rel="stylesheet">
<link href="css/plugins/dropzone/dropzone.css" rel="stylesheet">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body class="gray-bg">
<div class="middle-box text-center loginscreen animated fadeInDown">
<div>
<div>
<!--<h3 class="logo-name">MiiSky</h3>-->
<img src="img/landing/mii-logo.png">
</div>
<!--<h3>Register to MiiSky</h3>-->
<p>Create your vault to see it in action.</p>
<form id = "form" name = "form" class="validate-form" method="POST" action="formprofile.php" autocomplete = "off" >
register.js
/* (.ready)Executes the
function on
complete load
*/
$(document).ready(function()
/*executes the function
on click of id 'submit'
*/
$("#submit").click(function(e)
//validate front-end prior to back-end
var status = $('form')[0].checkValidity();
if(status)
/*jquery to call the url requested
and parse the data in json*/
$.ajax(
url: "register.php",
type: "POST",
//form serialization of the all parameters
data: $("#form").serialize(),
async: false,
//data passed in json
dataType: "JSON",
/*Give out the alert box
to display the results*/
success: function (json)
/*if error exists alert
the user*/
if(json.error)
alert(json.error_msg);
e.preventDefault();
else
//on successs of process
alert("Registeration successful!");
$('#form').submit();
,
//through out error from back-end if exist
error: function(jqXHR, textStatus, errorThrown)
alert(errorThrown);
);
);
);
register.php
<?php
session_start();
require_once 'DB_Functions.php';
$db = new DB_Functions();
// json response array
$response = array("error" => false);
if (!empty($_POST['salutation']) && !empty($_POST['fname']) && !empty($_POST['lname']) && !empty($_POST['dob']) && !empty($_POST['mobile']) && !empty($_POST['country']) && !empty($_POST['state']) && !empty($_POST['city']) && !empty($_POST['pin']))
/*
if required include seperate validation
for some fields which require validation
*/
// receiving the post params
$salutation = ($_POST['salutation']);
$fname = trim($_POST['fname']);
$lname = trim($_POST['lname']);
$dob = trim($_POST['dob']);
/* $email = trim($_POST['email']);
$password = $_POST['password'];*/
$mobile = trim($_POST['mobile']);
$country = trim($_POST['country']);
$state = trim($_POST['state']);
$city = trim($_POST['city']);
$pin = trim($_POST['pin']);
/*
validation process
starts from here
*/
// validate your email address
/* if(filter_var($email, FILTER_VALIDATE_EMAIL))
//validate your password
if(strlen($password) >= 6)*/
//validate your mobile
//$mobile="/^[1-9]*$/";
if(strlen($mobile) == 10)
//Check for valid email address
/*if ($db->isUserExisted($email))
// user already existed
$response["error"] = true;
$response["error_msg"] = "User already existed with " . $email;
echo json_encode($response);
*/
if($db->isMobileNumberExisted($mobile))
//user already existed
$response["error"] = true;
$response["error_msg"] = "user already existed with" . $mobile;
echo json_encode($response);
else
// create a new user
$user = $db->storeUser($salutation, $fname, $lname, $dob, $mobile, $country, $state, $city, $pin);
if ($user)
// user stored successfully
$response["error"] = false;
$_SESSION["fullname"] = $user["fullname"];
$_SESSION["vault_no"] = $user["vault_no"];
echo json_encode($response);
else
// user failed to store
$response["error"] = true;
$response["error_msg"] = "Unknown error occurred in registration!";
echo json_encode($response);
else
//invalid mobile number
$response["error"] = true;
$response["error_msg"] = "PLEASE ENTER VALID MOBILE NUMBER!";
echo json_encode($response);
/* else
//min of 6-charecters
$response["error"] = true;
$response["error_msg"] = "PASSWORD MUST BE OF MINIMUM 6-CHARACTERS!";
echo json_encode($response);
else
// invalid email address
$response["error"] = true;
$response["error_msg"] = "invalid email address";
echo json_encode($response);
*/
else
//missing the required fields
$response["error"] = true;
$response["error_msg"] = "Please fill all the required parameters!";
echo json_encode($response);
?>
form.php sn-p
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MiiSky | Dashboard</title>
<script type="text/javascript" src="jquery_source"></script>
<script type="text/javascript" src = "form_profile.js"></script>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="font-awesome/css/font-awesome.css" rel="stylesheet">
<!-- Toastr style -->
<link href="css/plugins/toastr/toastr.min.css" rel="stylesheet">
<!-- Gritter -->
<link href="js/plugins/gritter/jquery.gritter.css" rel="stylesheet">
<link href="css/animate.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
<div id="wrapper">
<nav class="navbar-default navbar-static-side" role="navigation">
<div class="sidebar-collapse">
<ul class="nav metismenu" id="side-menu">
<li class="nav-header">
<div class="dropdown profile-element">
<!--<span>
<img class="img-circle" src="img/sunil1.jpg" />
</span>-->
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
<span class="clear"> <span class="block m-t-xs"> <strong class="font-bold">
/*here is use of session variable*/
<?php
echo $_SESSION["fullname"];
?></strong>
</span>
<!--<span class="text-muted text-xs block">android Developer <b class="caret"></b></span>--> </span> </a>
<ul class="dropdown-menu animated fadeInRight m-t-xs">
<li><a href="#">Profile</a></li>
<li><a href="#">Contacts</a></li>
<li><a href="#">Mailbox</a></li>
<li class="divider"></li>
<li><a href="sign_out.php">Sign out</a></li>
</ul>
</div>
<div class="logo-element">
MiiSky
</div>
</li>
<li>
<a href=""><i class="fa fa-user"></i> <span class="nav-label">Profile Vault</span><span class="fa arrow"></span></a>
</li>
</ul>
</div>
</nav>
<div id="page-wrapper" class="gray-bg dashbard-1">
<div class="row border-bottom">
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
<div class="navbar-header">
<a class="navbar-minimalize minimalize-styl-2 btn btn-primary " href="#"><i class="fa fa-bars"></i> </a>
<form role="search" class="navbar-form-custom" action="search_results.html">
<div class="form-group">
<input type="text" class="form-control" name="top-search" id="top-search">
</div>
</form>
</div>
<ul class="nav navbar-top-links navbar-right">
<li>
<span class="m-r-sm text-muted welcome-message">Welcome to MiiSky</span>
</li>
<li class="dropdown">
<li>
<a href="signin.html">
<i class="fa fa-sign-out"></i> Sign Out
</a>
</li>
<!--<li>
<a class="right-sidebar-toggle">
<i class="fa fa-tasks"></i>
</a>
</li>-->
</ul>
</nav>
<br><div style="font-size:30px; text-align:center;">
/*here is use of session variable*/
<?php
echo "<h1>Your Vault Number is generated and will be sent to your Mobile shortly.<br></h1>" . $_SESSION["vault_no"];
?>
</div>
【问题讨论】:
您是否也在 form.php 页面上启动了会话? 您必须使用会话变量在每个页面上使用session_start()
。
只有在创建新用户时才会设置会话变量;因此,如果您在会话数组中看不到任何内容,则表示未创建用户。
这里看不出有什么错误,cmets和answer足以解决这个问题。你可能想看看my answer here。如果这也不能解决您的问题,请联系您的托管服务提供商。
您需要制作php.ini
文件并将这一行添加到该文件中:session.save_path = "/temp/php_sessions"
。您需要创建文件夹temp
,然后将其他php_sessions
文件夹创建到当前temp
文件夹中。
【参考方案1】:
在声明会话变量之前你有空间。
<?php
session_start();
?>
注意<?php.
之前的空格,这会产生问题,因此只需将其删除即可。
【讨论】:
好吧...先生试试..!! 注意:这仅适用于 PHP 手册中所述的基于 cookie 的会话 - “要使用基于 cookie 的会话,必须在向浏览器输出任何内容之前调用 session_start()。” - php.net/manual/en/function.session-start.php 先生..我发现您的回答有效..!!【参考方案2】:session_start() 函数必须是文档中的第一件事。在任何 HTML 标记之前。 试试这个:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
【讨论】:
是的,先生完成了更改,但遗憾的是没有工作..!! 注意:这仅适用于 PHP 手册中所述的基于 cookie 的会话 - “要使用基于 cookie 的会话,必须在向浏览器输出任何内容之前调用 session_start()。” - php.net/manual/en/function.session-start.php soo..先生,如果我出错了,请指导我..!!【参考方案3】:您已将fullName
保存为$_SESSION["user"]["fullname"]
:
$_SESSION["user"]["fullname"] = $user["fullname"];
但你是这样呼应的:
echo $_SESSION["fullname"];
修复它以回显正确的:
echo $_SESSION["user"]["fullname"];
注意:您可以使用附加检查if(isset($_SESSION["user"]["fullname"]))
,以便在未实际设置时不会出错。但这在您使用正确的变量/键之前不会解决任何问题。
【讨论】:
先生,我已经编辑了我的代码..实际上那是一个旧代码,现在我已经按照上面的方法进行了更改....!!! 作为你的建议我已经删除了我的答案..!! plzz ..检查代码...任何建议都敞开心扉接受..!! 谢谢,您还可以为您的$db->storeUser()
函数添加代码吗?或者至少是此函数返回的$user
数组的样本。
给你先生...!!以上是关于会话变量未在实时服务器中传递[关闭]的主要内容,如果未能解决你的问题,请参考以下文章