W kodowaniu ustawiłem Session
trochę danych.
Session["usedData"] = "sample data";
A pytanie brzmi: jak mogę pobrać wartość sesji (w moim przykładzie; „przykładowe dane”) w javascript i ustawić Session["usedData"]
nową wartość?
W kodowaniu ustawiłem Session
trochę danych.
Session["usedData"] = "sample data";
A pytanie brzmi: jak mogę pobrać wartość sesji (w moim przykładzie; „przykładowe dane”) w javascript i ustawić Session["usedData"]
nową wartość?
Odpowiedzi:
Dostęp i przypisywanie zmiennej sesji za pomocą JavaScript:
Przypisywanie zmiennej sesji ASP.NET przy użyciu JavaScript:
<script type="text/javascript">
function SetUserName()
{
var userName = "Shekhar Shete";
'<%Session["UserName"] = "' + userName + '"; %>';
alert('<%=Session["UserName"] %>');
}
</script>
Dostęp do zmiennej sesji ASP.NET przy użyciu JavaScript:
<script type="text/javascript">
function GetUserName()
{
var username = '<%= Session["UserName"] %>';
alert(username );
}
</script>
+ userName +
Nie możesz uzyskać dostępu Session
bezpośrednio w JavaScript.
Możesz utworzyć ukryte pole i przekazać je na swoją stronę, a następnie użyć JavaScript, aby pobrać obiekt za pośrednictwem document.getElementById
JavaScript nie może bezpośrednio ustawiać wartości sesji. Aby ustawić wartości sesji z javascript, wykonuję wywołanie ajax w następujący sposób.
W pliku ASPx lub html,
<script type="text/javascript">
$(function(){
//Getting values from session and saving in javascript variable.
// But this will be executed only at document.ready.
var firstName = '<%= Session["FirstName"] ?? "" %>';
var lastName = '<%= Session["LastName"] ?? "" %>';
$("#FirstName").val(firstName);
$("#LastName").val(lastName);
$('Button').click(function(){
//Posting values to save in session
$.post(document.URL+'?mode=ajax',
{'FirstName':$("#FirstName").val(),
'LastName':$("#LastName").val()
} );
});
});
Po stronie serwera
protected void Page_Load(object sender, EventArgs e)
{
if(Request.QueryString["mode"] != null && Request.QueryString["mode"] == "ajax")
{
//Saving the variables in session. Variables are posted by ajax.
Session["FirstName"] = Request.Form["FirstName"] ?? "";
Session["LastName"] = Request.Form["LastName"] ?? "";
}
}
Za uzyskanie wartości sesji, jak powiedzieli Shekhar i Rajeev
var firstName = '<%= Session["FirstName"] ?? "" %>';
Mam nadzieję że to pomoże.
Spróbuj tego
var sessionValue = '<%=Session["usedData"]%>'
Zakładając, że masz na myśli „JavaScript po stronie klienta” - wtedy nie możesz, przynajmniej nie bezpośrednio.
Dane sesji są przechowywane na serwerze, więc kod po stronie klienta nie może ich zobaczyć bez komunikacji z serwerem.
Aby uzyskać do niego dostęp, należy wysłać żądanie HTTP i poprosić program po stronie serwera o modyfikację / odczyt i zwrot danych.
Przypisz wartość do ukrytego pola w pliku związanym z kodem. Uzyskaj dostęp do tej wartości w swoim javascript jak do zwykłej kontrolki HTML.
Nie możesz ustawić zmiennych sesji po stronie sesji z Javascript
. Jeśli chcesz to zrobić, musisz utworzyć AJAX
POST, aby zaktualizować to na serwerze, ale jeśli wybór samochodu jest ważnym wydarzeniem, może być łatwiejsze POST .
najpierw utwórz metodę w kodzie, aby ustawić sesję:
[System.Web.Services.WebMethod]
public static void SetSession(int id)
{
Page objp = new Page();
objp.Session["IdBalanceSheet"] = id;
}
następnie zadzwoń po stronie klienta:
function ChangeSession(values) {
PageMethods.SetSession(values);
}
powinieneś ustawić EnablePageMethods na true:
<asp:ScriptManager EnablePageMethods="true" ID="MainSM" runat="server" ScriptMode="Release" LoadScriptsBeforeUI="true"></asp:ScriptManager>
Jeśli chcesz przeczytać wartość sesji w javascript, ten kod pomoże ci.
<script type='text/javascript'>
var userID='@Session["userID"]';
</script>
Możesz także ustawić zmienną we właściwości i wywołać ją z js:
Po stronie serwera:
Protected ReadOnly Property wasFieldEditedStatus() As Boolean
Get
Return If((wasFieldEdited), "true", "false")
End Get
End Property
A potem w javascript:
alert("The wasFieldEdited Value: <%= wasFieldEditedStatus %>" );
Szukałem rozwiązania tego problemu, dopóki nie znalazłem bardzo prostego rozwiązania dostępu do zmiennych sesji, zakładając, że używasz pliku .php po stronie serwera. Mam nadzieję, że odpowiada na część pytania:
wartość sesji dostępu
<script type="text/javascript">
var value = <?php echo $_SESSION['key']; ?>;
console.log(value);
</script>
Edycja: lepszy przykład poniżej, który możesz wypróbować na phpfiddle.org, w zakładce "codespace"
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<?php
$_SESSION['key'] = 10;
$i = $_SESSION['key'];
?>
</head>
<body>
<p id="affichage">hello</p>
<script type="text/javascript">
var value = <?php echo $i; ?>;
$("#affichage").html(value);
</script>
</body>
</html>
ustaw wartość sesji
przekazać mu dowolną zmienną, jeśli chcesz. na przykład,
$you = 13;
$_SESSION['user_id'] = $you;
To powinno działać, chociaż tego nie testowałem.
To oszustwo, ale możesz to zrobić, wyślij wartość na stronę serwera jako parametr
<script>
var myVar = "hello"
window.location.href = window.location.href.replace(/[\?#].*|$/, "?param=" + myVar); //Send the variable to the server side
</script>
A po stronie serwera pobierz parametr
string myVar = Request.QueryString["param"];
Session["SessionName"] = myVar;
mam nadzieję że to pomoże
Aby zmodyfikować dane sesji z serwera po utworzeniu strony, musisz użyć AJAX lub nawet JQuery, aby wykonać zadanie. Obaj mogą nawiązać połączenie z serwerem, aby zmodyfikować dane sesji i odzyskać dane zwrócone z tego połączenia.
<?php
session_start();
$_SESSION['usedData'] = "Some Value"; //setting for now since it doesn't exist
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Modifying PHP Session Data</title>
<script type='text/javascript'>
var usedData = '<?php echo $_SESSION['usedData']; ?>';
var oldDataValue = null;
/* If function used, sends new data from input field to the
server, then gets response from server if any. */
function modifySession () {
var newValue = document.getElementById("newValueData").value;
/* You could always check the newValue here before making
the request so you know if its set or needs filtered. */
var xhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
oldDataValue = usedData;
usedData = this.responseText; //response from php script
document.getElementById("sessionValue").innerHTML = usedData;
document.getElementById("sessionOldValue").innerHTML = oldDataValue;
}
};
xhttp.open("GET", "modifySession.php?newData="+newValue, true);
xhttp.send();
}
</script>
</head>
<body>
<h1><p>Modify Session</p></h1>
Current Value: <div id='sessionValue' style='display:inline'><?php echo $_SESSION['usedData']; ?></div><br/>
Old Value: <div id='sessionOldValue' style='display:inline'><?php echo $_SESSION['usedData']; ?></div><br/>
New Value: <input type='text' id='newValueData' /><br/>
<button onClick='modifySession()'>Change Value</button>
</body>
</html>
Teraz musimy zrobić mały skrypt php o nazwie modifiedSession.php, aby wprowadzić zmiany w danych sesji i przesłać dane z powrotem, jeśli to konieczne.
<?php
session_start();
$_SESSION['usedData'] = $_GET['newData']; //filter if necessary
echo $_SESSION['usedData']; // Post results back if necessary
?>
Powinno to przynieść oczekiwane rezultaty, modyfikując sesję po stronie serwera za pomocą PHP / AJAX.
Oto, co zadziałało dla mnie. Javascript ma to.
<script type="text/javascript">
var deptname = '';
</script>
C # za kodem ma to - można go umieścić na stronie wzorcowej, aby resetował zmienną przy każdej zmianie strony.
String csname1 = "LoadScript";
Type cstype = p.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = p.ClientScript;
// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
String cstext1 = funct;
cs.RegisterStartupScript(cstype, csname1, "deptname = 'accounting'", true);
}
else
{
String cstext = funct;
cs.RegisterClientScriptBlock(cstype, csname1, "deptname ='accounting'",true);
}
Dodaj ten kod do przycisku kliknij, aby potwierdzić zmianę nazwy działu.
alert(deptname);
Użyłem mojego pliku .php, aby umieścić wymagane w sesjach
$ _SESSION ['name'] = $ phparray ["name"]; $ ajaxoutput ['name'] = $ phparray ["nazwa"];
w moim pliku .js, którego użyłem
sessionStorage.setItem ("nazwa", ajaxreturnedarray ["nazwa"]);
i odzyskałem to za pomocą
var myName = sessionStorage.getItem ("nazwa");
w innych plikach .js lub w tych samych plikach .js
jeśli zachowam to tak, jak jest, będzie zwracać to samo przez cały czas, nawet jeśli się wylogujesz. więc wylogowując się zrobiłem
sessionStorage.setItem ("nazwa", "");
używając tej opróżniłem zmienną lokalną. Użyłem tego procesu w sesjach logowania / wylogowania z pojedynczej strony internetowej. Mam nadzieję, że ten sposób zadziała dla Ciebie, ponieważ zadziałał dla mnie. plz daj mi znać swoje doświadczenia.
Udało mi się rozwiązać podobny problem z prostymi parametrami adresu URL i automatycznym odświeżaniem.
Możesz pobrać wartości z parametrów adresu URL, zrobić z nimi co chcesz i po prostu odświeżyć stronę.
HTML:
<a href=\"webpage.aspx?parameterName=parameterValue"> LinkText </a>
DO#:
string variable = Request.QueryString["parameterName"];
if (parameterName!= null)
{
Session["sessionVariable"] += parameterName;
Response.AddHeader("REFRESH", "1;URL=webpage.aspx");
}
<?php
session_start();
$_SESSION['mydata']="some text";
?>
<script>
var myfirstdata="<?php echo $_SESSION['mydata'];?>";
</script>
Prawdopodobnie jakiś przebieg przy takim podejściu. Wydaje się, że ta data wraca do zmiennej sesji. Ciąg, który zwraca, wyświetla datę javascript, ale kiedy próbuję manipulować ciągiem, wyświetla kod javascript.
ob_start();
?>
<script type="text/javascript">
var d = new Date();
document.write(d);
</script>
<?
$_SESSION["date"] = ob_get_contents();
ob_end_clean();
echo $_SESSION["date"]; // displays the date
echo substr($_SESSION["date"],28);
// displays 'script"> var d = new Date(); document.write(d);'