0

變化值我的項目是由2個HTML頁面組成:全局變量沒有在Javascript

  1. index.html,其中包含了登錄和註冊表格。
  2. user_logged.html,其中包含登錄用戶的所有功能。

現在,我想要做的是一個控件,如果用戶真的登錄了,以避免用戶在瀏覽器中粘貼一個url並可以看到另一個用戶的頁面。 小時,因爲現在,如果用戶這個URL粘貼在瀏覽器:

www.user_loggato.html?user=x#profile 

是如果登錄用戶爲x和這是不是很好。

我的html頁面都使用包含腳本的js文件。 我決定創建一個名爲logged inizialized的全局變量爲false,並在登錄成功時將該變量更改爲true。

問題是變量仍然是錯誤的。

這裏是代碼:

var logged=false; (write in the file a.js) 

而在文件b.js我:

function login() { 

//if succesfull 
     logged=true; 
     window.location.href = "user_loggato.html?user="+ JSON.parse(str).username + #profilo"; 
一些提醒我發現我的變量記錄的永遠是假的

現在。爲什麼?

+0

全球**不**意味着它將持續在幾個不同的頁面。一旦頁面重新加載,所有變量都將丟失,因爲HTML(和javascript)是無狀態的,除非您使用某種存儲(讀取:cookie或localStorage)。 – adeneo

+0

您在瀏覽器中保存的內容對於用戶只需手動切換其登錄狀態是安全的。你需要在服務器上跟蹤這一點。 – jbabey

回答

2

Javascript並不是要走的路,因爲它在客戶端運行。即使有不同請求之間共享javascript變量的方法,用戶也可以操縱它們。

你必須採取服務器端技術(也許PHP與會議)。

+0

好吧,我不使用PHP,我使用Java。如果我在數據庫中創建一個叫做記錄的coloumn,並且每次都更改它可能是正確的? – Martina

+0

@ user1856906 Java也有會話。 –

+0

這不是如何使用會話。如果您在數據庫中保存「已登錄」,並且用戶關閉了電腦,他會永遠登錄嗎?使用java閱讀關於會話和用法的良好教程。 –

0

JS變量將在每次提交/刷新時重置。您可以使用sessionStorage或cookie來達到此目的。例如:

在你的登錄表單將這個:

function login() { 
    window.sessionStorage[logged] = true; 
    window.location.href = "user_loggato.html?user="+ JSON.parse(str).username + #profilo"; 
} 

而在你的user_loggato.html,你可以retrive它想:

function getLoginStatus() { 
    return window.sessionStorage['logged']; 
} 

希望這有助於。

+0

請注意,即使你這樣做,這是不安全的。 –

+0

我必須定義記錄的變量? – Martina

+0

同意@Jon Dvorak,它不保存。服務器端最好做。 –