2012-05-03 14 views
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 
} 
?> 
+0

「クロスサイト」とはどういう意味ですか? –

+0

別のページにリダイレクトした後。 –

+0

Noobここで間違いがありますが、C:\ windows \ tempにはiusrとiis_usrsがありませんでしたので、フォルダのプロパティの[セキュリティ]タブでファイルを変更することができませんでした。 –

答えて

0

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

3

それがどのようにセッション(通常は)仕事ではありませんので。セッションクッキーにはセッションIDだけが格納されます。実際の情報で、セッションはサーバーにのみ格納されます。

+0

修正された質問。 –

0

クッキーを使用すると、Webサーバー(ファイルまたはデータベースのいずれか)に保存されているセッション変数を検索することができます。これは、人々がデータ値をスニッフィングすることができず、また、クッキーが非常に長くなることを必要としないので、余分なセキュリティを追加する。

+0

問題を修正しました。私のコードにセッション変数を混乱させる何かが間違っていますか? –

0

前述のとおり、セッションCookieはセッションIDのみを格納します。

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

+0

訂正された質問、あなたはセッション変数を混乱させる私のコードに何か間違っていますか? –

関連する問題