0

セッション変数がクロスサイトで機能しないのはなぜですか?

私は明らかに自分のコードでそれらを設定しています。そうしないと、管理者としてログインしても管理ページにリダイレクトされません。

問題が何であるか、$_SESSION変数が保存されない理由などについて誰かが提案を持っている場合は、感謝します。

IIS 7 と FastCGI を使用すると、php.ini はデフォルト値になります。

コード例:

<?php session_start();
/* Include database config file. */
include("db_config.php");
/* If POST request do code. */
if ($_SERVER['REQUEST_METHOD']=='POST') 
{
/* Set variables for form fields. */
$username=$_POST["username"];
$password=$_POST["password"];
/* Queries on login. */
$query_params=array($username,$password);
$query="SELECT * FROM users WHERE username=? AND password=?";
$qresults=sqlsrv_query($dbconnect,$query,$query_params);
$permission_q="SELECT permission FROM users WHERE username=? AND password=?";
$permission_qr=sqlsrv_query($dbconnect,$permission_q,$query_params);
$firstname_q="SELECT firstname FROM users WHERE username=? AND password=?";
$firstname_qr=sqlsrv_query($dbconnect,$firstname_q,$query_params);
$lastname_q="SELECT lastname FROM users WHERE username=? AND password=?";
$lastname_qr=sqlsrv_query($dbconnect,$lastname_q,$query_params);
/* If any queries fail then kill script. */
if(sqlsrv_fetch($firstname_qr)===false)
{
die("Firstname couldn't be verified, terminated connection.");
}
$firstname=sqlsrv_get_field($firstname_qr,0);
if(sqlsrv_fetch($lastname_qr)===false)
{
die("Lastname couldn't be verified, terminated connection.");
}
$lastname=sqlsrv_get_field($lastname_qr,0);
if(sqlsrv_fetch($permission_qr)===false)
{
die("Permissions could not be verified, terminating connection.");
}
$permissions=sqlsrv_get_field($permission_qr,0);
/* If the username and password query results exist then do code. */
if(isset($qresults))
{
/* Number of rows is fetch array of username and pass results. */
$num_rows=sqlsrv_fetch_array($qresults,SQLSRV_FETCH_NUMERIC);
/* If rows is not null or is set then do code. */
if($num_rows!=null)
{
$_SESSION['username']=$username;
$_SESSION['firstname']=$firstname;
$_SESSION['lastname']=$lastname;
$_SESSION['permissions']=$permissions;
/* If permissions is equivelant to admin send to admin page. */
if($_SESSION['permissions']==="admin")
{

session_write_close();
echo '<meta http-equiv="refresh" content="0; url=./content/admin_dash.php">';
die();
//endif
}
else
{

session_write_close();
echo '<meta http-equiv="refresh" content="0; url=./content/user_dash.php">';
die();
//endelse
}
//endif
}
else
{
//elseif num_rows not true
echo "Invalid Login.<br/>Your credentials did not match or there was an error.<br/>";
$_SESSION['username'] = '';
if(sqlsrv_errors(SQLSRV_ERR_ALL)==null)
{
echo "No errors detected.";
//endif
}
else
{
echo "Errors detected:<br/>";
print_r( sqlsrv_errors(SQLSRV_ERR_ALL));
//endelse
}
//endelse
}
//endif
}
else
{
die("Error with query. Contact your system admin.");
//endelse
}
//endif
}
else
{
die("Request was not POST. Please use login page.");
//endelse
}
?>
4

4 に答える 4

3

それはセッションが(通常)どのように機能するかではないためです。セッション Cookie には、セッション ID のみが保存されます。セッション内の実際の情報は、サーバーにのみ保存されます。

于 2012-05-03T17:09:06.047 に答える
0

Cookie は、Web サーバーに (ファイルまたはデータベースに) 保存されているセッション変数を PHP が検索できるようにするだけです。人々はデータ値を盗聴できず、Cookie を非常に長くする必要がないため、セキュリティが強化されます。

于 2012-05-03T17:10:01.037 に答える
0

前述のとおり、セッション Cookie にはセッション ID のみが保存されます。

カスタム コンテンツを含む Cookie に保存する場合は、この投稿を参照してください。http://davidwalsh.name/php-cookies

于 2012-05-03T17:10:53.900 に答える
0

C:\Windows\Temp フォルダーのアクセス許可が IIS_IUSRS ユーザーから受け入れるように設定されていなかったため、IIS がセッションを含む Temp フォルダーに何も保存できないという問題が見つかりました。

于 2012-06-05T17:58:24.420 に答える