2011-07-07 62 views
1

我正在設計一個基於Web的php報告系統。它涉及多個插入和更新到MySQL服務器的頁面。基本上,我希望有人能夠登錄,開始撰寫報告,然後逐步完成相當長的報告流程。他們之前只是填寫Excel電子表格。我基本上設置了分數表的$ _SESSION [$ var] =(自動增量ID)。使用會話變量從mysql服務器調用數據

$returnQuery = "Select AssessmentID FROM opsassessment.assessmentscores WHERE Date = '$Date' AND InspectorID = '$inspectorResult2[0]' 
          AND PlantAssistID = '$assistResult2[0]' AND Plant = '$plantResult2[0]'"; 

       $return = mysql_query ($returnQuery); 
       $return2 = mysql_fetch_row($return); 

       $_SESSION["return2"] = $return2[0]; 
       echo "The ID for this session is: " . $_SESSION["return2"]; 

然後,我將會話變量分配給每個頁面內的變量。然後使用該變量用來自多個複選框的數據更新assessmentcores表。我有兩個關於這個問題:

  1. 是否有一個「更好」的方式來做到這一點?模糊的我知道。雖然系統確實有效,但我懷疑有一種更簡單或更傳統的方法。

  2. 我運行使用會話的安全風險有多大? 注意:這是一個封閉的網絡,因此除非網絡已被黑客入侵,否則公司以外的任何人都無法訪問網頁。另外,我實現了SQL注入防護,如剝離HTML和特殊字符。

任何意見和/或反饋,將不勝感激。

回答

1

會話數據與您的服務器一樣安全。除非您選擇這樣做,否則所有數據都不會實際傳輸給用戶。

每個(或應該)傳輸給用戶的唯一與會話相關的數據是會話的ID。

但是,在會話中存儲ID號碼可能會有問題。考慮用戶幾乎同時啓動兩個報告的情況。無論哪個報告最後開始都會覆蓋第一個報告的ID號,現在兩個窗口中的所有操作都會影響報告#2。

+0

我明白你的意思,但不應該是一個問題。每個用戶每年可能會做一兩個報告(他們正在檢查大型製造工廠)。出於好奇,你將如何建造兩個窗戶不會導致這個問題? – Sedaition

+1

而不是在會話中存儲號碼。將其存儲在隱藏的字段值中,將其傳遞到URL中等等。或者,只需讓您的「開始新報告」腳本檢查另一個報告是否已經打開並禁止新的報告。 –

+0

好東西。有意義並將實施 – Sedaition

0

會話是爲了完全做你在做什麼。

他們比其他選項更安全,因爲他們的存儲是服務器端(與cookie存儲相對),所以有人可以訪問會話的唯一方式是他們可以訪問Web服務器的會話目錄,如果發生你有更大的問題擔心。

可以竊取會話,但攻擊者需要用戶的會話cookie。

但繼續做像你正在做的,存放行的主ID,以避免額外的查詢,這是它應該做的事(我會直接使用$ _SESSION變量,而不是將其複製到另一個變種)

方式

更多關於會話安全上SO:

PHP Session Security

Security of $_SESSION array

相關問題