2014-09-23 37 views
2

我有一個web服務需要用戶登錄,我爲用戶創建了標準的 $ _SESSION ['XXX']變量。不同文件夾的不同登錄(會話)

我想創建我的應用程序的「演示」,所以我爲它創建了另一個文件夾。 相同的代碼在那裏,除了數據庫的一切。

問題是,當用戶登錄其中一個時,它可以同時訪問這兩者。 因此,如果他登錄的演示應用程序將設置一個會話變量與該 同樣的事情,他將能夠訪問「正常」的應用程序。

我怎樣才能分開這兩個loggins? 我應該改變我的演示會話變量,還是有另一種方法來解決它 根據文件夾中的文件?

謝謝

+0

怎麼樣一個新的會話ID?在你的主體上,你檢查'$ _SESSION ['XXX']',並在你的演示中尋找'$ _SESSION ['demo_XXX']' – 2014-09-23 11:09:25

+0

編輯:看到你的編輯,yeap聽起來正確 – LefterisL 2014-09-23 11:12:23

+0

我使用nginx和memcache作爲會話處理程序和我傳遞一個不同的前綴到我的所有域(也適用於同一個域上的不同文件夾)使用此:'fastcgi_param PHP_VALUE memcached.sess_prefix = memc.sess.domainxy_demo.key。'' – DanFromGermany 2014-09-23 11:21:14

回答

0

使用different paths作爲2個應用程序中的會話cookie。

顯然,你不能在一個php.ini文件因此2個設置:

  • 設置在locationMatch指令的php_admin_value在httpd.conf(阿帕奇)
  • 設置在php_admin值.htaccess文件
  • 向PHP腳本添加一個前綴(或者修改常用的包含文件)以設置路徑。

請注意,如果您在代碼中指定路徑,則會通過ini_set()重新推薦session_set_cookie_params()。假設在php.ini的默認配置是演示網站(應該使用類似「/演示/」而不是「/」)......

if (false===strpos($_SERVER['REQUEST_URI'], 'demo') { 
    // using live application 
    session_set_cookie_params (1200, '/live/'); 
} 

(以上必須調用在session_start(之前運行))

1

我面臨同樣的問題。我也解決了它。因爲如果你正在服用2個變量,它們的名稱和ID從兩個網站例子,你只需要改變變量名象下面這樣:

對於站點1:

$_SESSION['username_site1'] = $username; 
$_SESSION['id_site1'] = $id; 

而對於站點2:

$_SESSION['username_site2'] = $username; 
$_SESSION['id_site2'] = $id; 

這樣兩個網站將有兩個不同的會話名稱,永遠不會讓你進入對方。

讓我知道它是否也適用於你。

關於。

0

您可以更改保存會話數據的路徑...

NB確保該文件夾存在並且可由網絡服務器用戶寫入(例如,沒有人)

<?php $newPath = '/tmp/sessions/demo'; ini_set('session.save_path',$newPath); ?>