You can use this way without any script:
First define this service:
using Microsoft.JSInterop; namespace MyProject.Utils { public interface ICookie { public Task SetValue(string key, string value, int? days = null); public Task<string> GetValue(string key, string def = ""); } public class Cookie : ICookie { readonly IJSRuntime JSRuntime; string expires = ""; public Cookie(IJSRuntime jsRuntime) { JSRuntime = jsRuntime; ExpireDays = 300; } public async Task SetValue(string key, string value, int? days = null) { var curExp = (days != null) ? (days > 0 ? DateToUTC(days.Value) : "") : expires; await SetCookie($"{key}={value}; expires={curExp}; path=/"); } public async Task<string> GetValue(string key, string def = "") { var cValue = await GetCookie(); if (string.IsNullOrEmpty(cValue)) return def; var vals = cValue.Split(';'); foreach (var val in vals) if(!string.IsNullOrEmpty(val) && val.IndexOf('=') > 0) if(val.Substring(0, val.IndexOf('=')).Trim().Equals(key, StringComparison.OrdinalIgnoreCase)) return val.Substring(val.IndexOf('=') + 1); return def; } private async Task SetCookie(string value) { await JSRuntime.InvokeVoidAsync("eval", $"document.cookie = \"{value}\""); } private async Task<string> GetCookie() { return await JSRuntime.InvokeAsync<string>("eval", $"document.cookie"); } public int ExpireDays { set => expires = DateToUTC(value); } private static string DateToUTC(int days) => DateTime.Now.AddDays(days).ToUniversalTime().ToString("R"); } }
You can set default expire by ExpireDays, and in SetValue() set null to days for use default or set to 0 for session or number of days.
Then import to _import.razor and add to service in Program.cs:
builder.Services.AddScoped<ICookie, Cookie>();
For use:
@inject ICookie cookie ... await cookie.SetValue("mytest20", "Hello Mohsen!"); _message = await cookie.GetValue("mytest20");
Enjoy it.
Updated by @jaap Comment.
LocalStoragevia this Blazor library. IMO, it's a more suitable client storage vehicle for Blazor apps as cookies are sent on every request whereas local storage is data available to your Blazor app to use as you see fit.