這個問題是關於在一個asp.net webforms應用程序中使用靜態修改器 我是一個begginer,雖然我從來沒有遇到過這個靜態「問題」的問題 我仍然我很少擔心這個問題,並想澄清這一點。靜態網頁方法 - 用戶之間共享價值的風險
最近我一直在使用,而不是asp.net
「正常」回傳Ajax/jQuery
POST
所以我可以把JavaScript對象的優勢,也避免了頁面刷新與服務器進行交互時
我的問題是關於AJAX後開始。它使用的是靜態方法 信息返回給用戶
對客戶端代碼的一些背景資料...(你可以跳過服務器端下面如果u喜歡)
客戶端:
HTML
<td id="TD_Actions_<%=RecordIdSlot%>" class="RepTblDataTds ">
<!-- will be used to trigger jquery function instead of asp imageButton that causes a postback
<span id="SpanEditRecord">
<img src="img/EditPic.png" style="width:20px;" class="CssClassImgBut_Edit" />
</span>
</td>
的jQuery:
var SpanEditRecord = $('#SpanEditRecord'); // the trigger span
// onclick event post data to code behind
SpanEditRecord.click(function() {
var Recid = $(this).parent().attr('id').split('_')[2];// takes the Sql table RecordiD
var data = [];
data.push({ key: 'RecordId', value: parseInt(Recid) }); //usually there's more data in "data"
var targetUrl = "default.aspx/EditKkRecord";
$.ajax({
type: 'POST',
url: targetUrl,
data: JSON.stringify({ SentPars: data }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
getResponseFromEditRequest(response.d);
},
error: function (response) {
alert(response.status + ' ' + response.statusText);
}
});
});
//handle callback /response from C# server side code
function getResponseFromEditRequest(htmlret) {
var packagerec = htmlret.split(',');
........
........
}
,現在所討論的話題..
C#服務器端
這部分所討論的問題, 是[WebMethod]
是不安全的,使用時和幾個用戶? 它可能意外地共享相同的返回值,因爲它是一個靜態方法?
[WebMethod]
public static string EditKkRecord(object SentPars)
{
Dictionary<string, string> NwDataDict = new Dictionary<string, string>();
string tmpSQLstr = "";
try
{
Array aa = (Array)SentPars;
foreach (Dictionary<string, object> pair in aa)
{
NwDataDict.Add((string)pair["key"], pair["value"].ToString());
}
}
catch (Exception ex)
{
return ex.Message;
}
if (NwDataDict.Count > 0)
return EditRecordFromtblKupaKtanaDb(NwDataDict);
return tmpSQLstr;
}
static string EditRecordFromtblKupaKtanaDb(Dictionary<string, string> todayKupa)
{
interact with database;
return "comaSeparated - columns values as a string";
}
所以可以將它在這種情況下發生的用戶A,B和C,會觸發Web方法和共享相同的返回值,如果說他們所有的嘗試和編輯同「的recordId」
或者更糟的是(我能想到),如果他們都編輯不同的記錄,實際上可以從第一個用戶共享行動...相同的記錄..
什麼時候它實際上是不安全的使用static
並且它是不安全的這個代碼?
你可以舉一個例子來怎麼會是安全的全局變量使用它呢?比如如何傳遞一些其他的程序返回值,或者如果很難想象它,你能否提供一個錯誤的使用變量的示例代碼,這些變量超出了webmethod範圍,舉一個例子vs正確的用法(正確的不被共享) –
查看更新的答案 –