Merhaba öncelikle bu tarz işlemlerinde veri aktarımında session kullanman pek iyi olmaz genel olarak sessiondan biraz kaçınmalısın

Sana tavsiyem bir cookie yarat ardından saklamak istediğin veri için bir tablo oluştur bu tablonun kolonları
id
veri
gecerliliksuresi

şeklinde olmalıdır.

ardından mesela veriyi oluşturduğunda o veri için bir gecerlilik suresi olustur veri hemen kullanılacaksa 10 saniye sonrasi olabilir veya 5 saniye

cookie içindeki değerleri aşaıdaki kod ile şifrele
string AesIV = @"XXXXXXXXXXRXMMPP";
string AesKey = @"XXXXXXXXXXBJNDRH";

bu değerleri kafana göre değiştir.Ben şifreledikten sonra hexedecimal e çeviriyorum öyle saklıyorum.Yada veriyi o şekilde url de de taşıyabilirsin.Yani çözüm yolu aslında çok ama session u pek tavsiye etmem bir projemde paranolmal akivite gibi session çok sorun yaratmıştı bana

#region sifreleme islemleri
    public static string ConvertStringToHex(this String input)
    {
        Byte[] stringBytes = System.Text.Encoding.Unicode.GetBytes(input);
        StringBuilder sbBytes = new StringBuilder(stringBytes.Length * 2);
        foreach (byte b in stringBytes)
        {
            sbBytes.AppendFormat("{0:X2}", b);
        }
        return sbBytes.ToString();
    }

    public static string ConvertHexToString(this String hexInput)
    {
        int numberChars = hexInput.Length;
        byte[] bytes = new byte[numberChars / 2];
        for (int i = 0; i < numberChars; i += 2)
        {
            bytes[i / 2] = Convert.ToByte(hexInput.Substring(i, 2), 16);
        }
        return System.Text.Encoding.Unicode.GetString(bytes);
    }

    public static string AES_Encrypt(this string text)
    {
        string AesIV = @"XXXXXXXXXXRXMMPP";
        string AesKey = @"XXXXXXXXXXBJNDRH";
        // AesCryptoServiceProvider
        AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
        aes.BlockSize = 128;//blok blok şifreleme yapıldığı için 
        //nekadarlık bloklar halinde şifreleneceği tanımlanıyor.
        aes.KeySize = 128;//anahtar ile şifreleme yapılıyo. 
        //anahtar boyutları, 128-192 ve 256 olabilir.
        aes.IV = Encoding.UTF8.GetBytes(AesIV);//bunu anlamadım :=)
        aes.Key = Encoding.UTF8.GetBytes(AesKey);//anahtar bytea çevriliyor. 
        //Böylece evrensel olarak bütün dosya, resim, metin vs 
        //bytelara çevrilerek şifreleme yapılabilir.
        aes.Mode = CipherMode.CBC;//Şifreleme modu seçiliyo genelde cbc olur 
        aes.Padding = PaddingMode.PKCS7;

        // Convert string to byte array
        byte[] src = Encoding.Unicode.GetBytes(text);//aynı şekilde 
        //metin de bytelara çevrilir

        //şifreleme burda gerçekleşiyor
        using (ICryptoTransform encrypt = aes.CreateEncryptor())
        {
            //bloklar alınır şifrelenir
            byte[] dest = encrypt.TransformFinalBlock(src, 0, src.Length);
            // //daha sonra şifreli byte blokları stringe çevrilir.
            return Convert.ToBase64String(dest).ConvertStringToHex();
        }
    }

    public static string AES_Decrypt(this string text)
    {
        text = text.ConvertHexToString();
        string AesIV = @"ZCEHNTNMQVRXMMPP";
        string AesKey = @"IJMXDFFXDWBJNDRH";
        // AesCryptoServiceProvider
        AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
        aes.BlockSize = 128;
        aes.KeySize = 128;
        aes.IV = Encoding.UTF8.GetBytes(AesIV);
        aes.Key = Encoding.UTF8.GetBytes(AesKey);
        aes.Mode = CipherMode.CBC;
        aes.Padding = PaddingMode.PKCS7;

        // Convert Base64 strings to byte array
        byte[] src = System.Convert.FromBase64String(text);

        // decryption
        using (ICryptoTransform decrypt = aes.CreateDecryptor())
        {
            byte[] dest = decrypt.TransformFinalBlock(src, 0, src.Length);
            return Encoding.Unicode.GetString(dest);
        }
    }
    #endregion