Currently, @@tmpdir is a read-only variable. Sometimes a DBA might need to run a particularly disk-consuming operation and doesn't want to exhaust all usual /tmp space. In these cases an ability to change @@session.tmpdir would be quite handy.
Because the user case is real and @@tmpdir is read-only, engines work around it by implementing their own tmpdir-like variables. For example, there is @@innodb_tmpdir and @@rocksdb_tmpdir.
- changing @@tmpdir, even a session value, must require FILE privilege.
- global @@tmpdir can be set to a list of directories to be used in a round-robin fashion. I don't think we necessarily have to support it for a session variable, allowing only one dir there should be enough.