Abstract session value manager
I don't get what your solution brings that something like this doesn't:

public class DataManager
{
    private HttpSessionState session
    public String MemberID
    {
        get {return session["MemberID"];}
        set {session["MemberID"] = value;}
    }
}


Managing the collections Keys and PossibleKeys in two places seems error-prone.
Your naming convention of prefixing everything with 'p' is unusual (in C#).