2017-01-21 8 views
1

私は角度2を使用して、クロスオリジンを作成しています(角度2のファイルはリモートサーバーのlocalhostとapiファイルにあります)。 User.phpはsessionを使ってユーザの状態を判断しますが、session_start()は/ tmpフォルダに新しいセッションファイルエントリを作成します。セッション開始()は、リクエストごとに新しいセッションファイルエントリを作成します。

php.iniの

session.auto_start Off Off 
session.cache_expire 180 180 
session.cache_limiter nocache nocache 
session.cookie_domain no value no value 
session.cookie_httponly Off Off 
session.cookie_lifetime 0 0 
session.cookie_path//
session.cookie_secure Off Off 
session.entropy_file /dev/urandom /dev/urandom 
session.entropy_length 32 32 
session.gc_divisor 1000 1000 
session.gc_maxlifetime 1440 1440 
session.gc_probability 1 1 
session.hash_bits_per_character 5 5 
session.hash_function 0 0 
session.lazy_write On On 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path /tmp /tmp 
session.serialize_handler php php 
session.upload_progress.cleanup On On 
session.upload_progress.enabled On On 
session.upload_progress.freq 1% 1% 
session.upload_progress.min_freq 1 1 
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS 
session.upload_progress.prefix upload_progress_ upload_progress_ 
session.use_cookies On On 
session.use_only_cookies On On 
session.use_strict_mode Off Off 
session.use_trans_sid 0 0 

user.php

<?php 

session_start(); 

header('Access-Control-Allow-Origin: http://votingsystem.gr:4200'); 
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Range, Content-Disposition, Content-Type, Authorization'); 
header('Content-Type: application/json'); 

require_once 'utilities/constants.php'; 
// require_once 'utilities/jwt.php'; 
// print_r($_SESSION['id']); 
// session_save_path('/tmp'); 
if (empty($_SESSION)) { 
    $response['empty session'] = 'empty session'; 
} else { 
    $response['not empty session'] = 'not empty(session)'; 
} 

if (file_get_contents('php://input') != null) { 

    $data = json_decode(file_get_contents('php://input')); 

    // $response['action'] = $data->action; 
    if ($data->action != null && !empty($data->action)) { 
     // $jwt = new JWT(); 

     if ($data->action === 'login_admin') { 
      // $_SESSION['id'] = 10; 
      $_SESSION['username'] = 'admin'; 
      // $response['id'] = $_SESSION['id']; 
      $response['username'] = $_SESSION['username']; 
     } else if ($data->action === 'login_user') { 
      //for mobile users 
     } else if ($data->action === 'check_admin_state') { 
      // $response['id'] = $_SESSION['username']; 
      if (isset($_SESSION['username'])) { 
       $response['code'] = STATUS_OK; 
       $response['desc'] = 'User authorized.'; 
      } else { 
       // $response['session'] = $_SESSION; 
       $response['code'] = ERROR_UNAUTHORIZED_USER; 
       $response['desc'] = 'User unathorized.'; 
      } 
     } else { 

     } 
     // $response['code'] = STATUS_OK; 
    } else { 
     $response['code'] = ERROR_INVALID_ACTION; 
     $response['desc'] = 'Invalid action.'; 
    } 
    // $response['session'] = $_SESSION; 
    echo json_encode($response); 
} 

?> 

答えて

0

は最終的に、掘りの時間後、私はそれを考え出しました。問題は、クロスオリジン要求では、クッキーがサーバーに送信されないため、私の角度コードが送信されなかったということです。 、()もはや新しいファイルのエントリが作成されていません

let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers, withCredentials: true }); 

    let body = { action: 'login_admin', username: 'test', password: 'password' }; 

    return this.http.post('url', 
      JSON.stringify(body), options) 
     .map(this.success) 
     .catch(this.error); 

と私はuser.phpファイルとのsession_startで

header('Access-Control-Allow-Credentials: true'); 

を追加しました:私は興味を持っている人のために、この

角度2のコードを変更しましたそれは期待どおりに働いています。

+0

あなたはあなたの認証を処理するためにセッションクッキーを使用できるようになりましたか?私は同じ正確な問題を抱えていますが、あなたの修正は私のためには機能しません。 – michaelAdam

関連する問題